In [63]:
import cv2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import glob
import pickle
%matplotlib inline

ym_per_pix = 30/720 # meters per pixel in y dimension
xm_per_pix = 3.7/650 # meters per pixel in x dimension

# Read in the saved objpoints and imgpoints
def getCalibrationParam(pickle_file):
    
    dist_pickle = pickle.load( open( pickle_file, "rb" ) )
    ret = dist_pickle["ret"]
    mtx = dist_pickle["mtx"]
    dist= dist_pickle["dist"]
    rvecs= dist_pickle["rvecs"]
    tvecs= dist_pickle["tvecs"]
    
    return ret,mtx,dist,rvecs,tvecs

def undistort(img,ret,mtx,dist,rvecs,tvecs):
    return cv2.undistort(img, mtx, dist, None, mtx)


def corner_unwarp(img):
    
    #Image height and width
    h,w = img.shape[0],img.shape[1]
    
    # Identify Rectangle instead of trapezoid that will allow curves to fall-into region
    #of interest.
    '''
    src = np.zeros((4, 2), dtype = "float32")
    src[0],src[1] = [525,450],[725,450]
    src[2],src[3] = [275,680],[925,680]

    dst = np.zeros((4, 2), dtype = "float32")    
    dst[0],dst[1] = [100,0],[1000,0]
    dst[2],dst[3] = [425,720],[775, 720]
    '''
    src = np.zeros((4, 2), dtype = "float32")
    src[0],src[1] = [560,450],[690,450]
    src[2],src[3] = [250,680],[1050,680]

    dst = np.zeros((4, 2), dtype = "float32")    
    dst[0],dst[1] = [100,0],[1000,0]
    dst[2],dst[3] = [300,720],[1000, 720] 
    
    ##Unwarp
    M = cv2.getPerspectiveTransform(src, dst) 
    MInv = cv2.getPerspectiveTransform(dst,src) 
    warped = cv2.warpPerspective(img, M,(w,h), flags=cv2.INTER_LINEAR)        

    return M,MInv,warped

def abs_sobel_thresh(img, orient='x', sobel_kernel=3, thresh=(0, 255)):
    # Calculate directional gradient
    if orient == 'x':
        sobel = cv2.Sobel(img, cv2.CV_64F, 1, 0,ksize = sobel_kernel) # Take the derivative in x
    else:
        sobel = cv2.Sobel(img, cv2.CV_64F, 0, 1,ksize = sobel_kernel) # Take the derivative in y
        
    abs_sobel = np.absolute(sobel) # Absolute x derivative to accentuate lines away from horizontal
    scaled_sobel = np.uint8(255*abs_sobel/np.max(abs_sobel))
    
    # Apply threshold
    grad_binary = np.zeros_like(scaled_sobel)
    grad_binary[(scaled_sobel >= thresh[0]) & (scaled_sobel <= thresh[1])] = 1
    
    return grad_binary

def mag_thresh(image, sobel_kernel=3, mag_thresh=(0, 255)):
    
    abs_sobelx = np.absolute(cv2.Sobel(image, cv2.CV_64F, 1, 0,ksize = sobel_kernel))
    abs_sobely = np.absolute(cv2.Sobel(image, cv2.CV_64F, 0, 1,ksize = sobel_kernel))
    
    abs_sobelxy = np.sqrt(abs_sobelx**2 + abs_sobely**2)
    # Rescale back to 8 bit integer
    scaled_sobel = np.uint8(255*abs_sobelxy/np.max(abs_sobelxy))

    mag_binary = np.zeros_like(scaled_sobel)
    mag_binary[(scaled_sobel >= mag_thresh[0]) & (scaled_sobel <= mag_thresh[1])] = 1
    return mag_binary

def dir_threshold(image, sobel_kernel=3, thresh=(0, np.pi/2)):
    
    abs_sobelx = np.absolute(cv2.Sobel(image, cv2.CV_64F, 1, 0,ksize = sobel_kernel))
    abs_sobely = np.absolute(cv2.Sobel(image, cv2.CV_64F, 0, 1,ksize = sobel_kernel))
    
    absgraddir = np.arctan2(abs_sobely, abs_sobelx)
    
    dir_binary =  np.zeros_like(absgraddir)
    dir_binary[(absgraddir >= thresh[0]) & (absgraddir <= thresh[1])] = 1

    return dir_binary

print("functions created")
functions created
In [56]:
##Lane marking and curvature.
%matplotlib inline


def find_histogram_lane(binary_warped,draw_img):
    
    # Create an output image to draw on and  visualize the result
    out_img = np.dstack((binary_warped, binary_warped, binary_warped))*255
    #plt.imshow(out_img)
    # Identify the x and y positions of all nonzero pixels in the image
    nonzero = binary_warped.nonzero()
    nonzeroy = np.array(nonzero[0])
    nonzerox = np.array(nonzero[1])
    # Set the width of the windows +/- margin
    margin = 100
    left_fit,right_fit,left_fitx,right_fitx = [],[],[],[]
    
    # Assuming you have created a warped binary image called "binary_warped"
    # Take a histogram of the bottom half of the image
    histogram = np.sum(binary_warped[np.int(binary_warped.shape[0]/2):,:], axis=0)
    # Find the peak of the left and right halves of the histogram
    # These will be the starting point for the left and right lines
    midpoint = np.int(histogram.shape[0]/2)
    quarter_point = np.int(midpoint//2)

    leftx_base = np.argmax(histogram[:midpoint]) 
    rightx_base = np.argmax(histogram[midpoint:]) + midpoint

    #print("midpoint: {} quarter_point: {}".format(midpoint,quarter_point))
    #print("left base:{} right base: {}".format(leftx_base,rightx_base))

    # Choose the number of sliding windows
    nwindows = 10
    # Set height of windows
    window_height = np.int(binary_warped.shape[0]/nwindows)
    #print("window_height: ".format(window_height))

    # Current positions to be updated for each window
    leftx_current = leftx_base
    rightx_current = rightx_base

    # Set minimum number of pixels found to recenter window
    minpix = 40
    # Create empty lists to receive left and right lane pixel indices
    left_lane_inds = []
    right_lane_inds = []
    
    # Rectangle data for visualization
    rect_box_data = []
    
    # Step through the windows one by one
    for window in range(nwindows):
        # Identify window boundaries in x and y (and right and left)
        win_y_low = binary_warped.shape[0] - (window+1)*window_height
        win_y_high = binary_warped.shape[0] - window*window_height
        win_xleft_low = leftx_current - margin
        win_xleft_high = leftx_current + margin
        win_xright_low = rightx_current - margin
        win_xright_high = rightx_current + margin
        rect_box_data.append((win_y_low, win_y_high, win_xleft_low, win_xleft_high, win_xright_low, win_xright_high))
        

        #plt.imshow(out_img)
        # Identify the nonzero pixels in x and y within the window
        good_left_inds = ((nonzeroy >= win_y_low) & (nonzeroy < win_y_high) & (nonzerox >= win_xleft_low) & (nonzerox < win_xleft_high)).nonzero()[0]
        good_right_inds = ((nonzeroy >= win_y_low) & (nonzeroy < win_y_high) & (nonzerox >= win_xright_low) & (nonzerox < win_xright_high)).nonzero()[0]
        # Append these indices to the lists
        left_lane_inds.append(good_left_inds)
        right_lane_inds.append(good_right_inds)
        # If you found > minpix pixels, recenter next window on their mean position
        if len(good_left_inds) > minpix:
            leftx_current = np.int(np.mean(nonzerox[good_left_inds]))
        if len(good_right_inds) > minpix:        
            rightx_current = np.int(np.mean(nonzerox[good_right_inds]))

    # Concatenate the arrays of indices
    left_lane_inds = np.concatenate(left_lane_inds)
    right_lane_inds = np.concatenate(right_lane_inds)


  # Again, extract left and right line pixel positions
    leftx = nonzerox[left_lane_inds]
    lefty = nonzeroy[left_lane_inds] 
    rightx = nonzerox[right_lane_inds]
    righty = nonzeroy[right_lane_inds]

    # Generate x and y values for plotting
    ploty = np.linspace(0, binary_warped.shape[0]-1, binary_warped.shape[0] )
    window_img = np.zeros_like(out_img)


    if len(leftx) > 0:
        left_fit = np.polyfit(lefty, leftx, 2)
        left_fitx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2]
        if draw_img == True:
            out_img[nonzeroy[left_lane_inds], nonzerox[left_lane_inds]] = [255, 0, 0]
            left_line_window1 = np.array([np.transpose(np.vstack([left_fitx-margin, ploty]))])
            left_line_window2 = np.array([np.flipud(np.transpose(np.vstack([left_fitx+margin, ploty])))])
            left_line_pts = np.hstack((left_line_window1, left_line_window2))
            # Draw the lane onto the warped blank image
            cv2.fillPoly(window_img, np.int_([left_line_pts]), (0,255, 0))
            # Draw the windows on the visualization image
            for rect in rect_box_data:
                # Draw the windows on the visualization image
                cv2.rectangle(out_img,(rect[2],rect[0]),(rect[3],rect[1]),(0,255,0), 2) 

    if len(rightx) > 0:
        right_fit = np.polyfit(righty, rightx, 2)
        right_fitx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2]
        if draw_img == True:
            out_img[nonzeroy[right_lane_inds], nonzerox[right_lane_inds]] = [0, 0, 255]
            right_line_window1 = np.array([np.transpose(np.vstack([right_fitx-margin, ploty]))])
            right_line_window2 = np.array([np.flipud(np.transpose(np.vstack([right_fitx+margin, ploty])))])
            right_line_pts = np.hstack((right_line_window1, right_line_window2))
            # Draw the lane onto the warped blank image
            cv2.fillPoly(window_img, np.int_([right_line_pts]), (0,255, 0))
            # Draw the windows on the visualization image
            for rect in rect_box_data:
                # Draw the windows on the visualization image
                cv2.rectangle(out_img,(rect[4],rect[0]),(rect[5],rect[1]),(0,255,0), 2)                     

    if draw_img == True:
        result = cv2.addWeighted(out_img, 0.6, window_img, 0.3, 0)
        #print(result)
        return result,left_fit,right_fit,left_fitx,right_fitx,ploty,rect_box_data,histogram
    else:
        return None,left_fit,right_fit,left_fitx,right_fitx,ploty,rect_box_data,histogram        
        
def find_lane(binary_warped,draw_img,in_left_fit,in_right_fit):
    
    # Create an output image to draw on and  visualize the result
    out_img = np.dstack((binary_warped, binary_warped, binary_warped))*255
    #plt.imshow(out_img)
    # Identify the x and y positions of all nonzero pixels in the image
    nonzero = binary_warped.nonzero()
    nonzeroy = np.array(nonzero[0])
    nonzerox = np.array(nonzero[1])
    # Set the width of the windows +/- margin
    margin = 100
    left_fit,right_fit,left_fitx,right_fitx = [],[],[],[]
    
    left_fit = in_left_fit
    right_fit = in_right_fit
    left_lane_inds = ((nonzerox > (left_fit[0]*(nonzeroy**2) + left_fit[1]*nonzeroy + left_fit[2] - margin)) & (nonzerox < (left_fit[0]*(nonzeroy**2) + left_fit[1]*nonzeroy + left_fit[2] + margin))) 
    right_lane_inds = ((nonzerox > (right_fit[0]*(nonzeroy**2) + right_fit[1]*nonzeroy + right_fit[2] - margin)) & (nonzerox < (right_fit[0]*(nonzeroy**2) + right_fit[1]*nonzeroy + right_fit[2] + margin)))  

    # Again, extract left and right line pixel positions
    leftx = nonzerox[left_lane_inds]
    lefty = nonzeroy[left_lane_inds] 
    rightx = nonzerox[right_lane_inds]
    righty = nonzeroy[right_lane_inds]
    
    # Generate x and y values for plotting
    ploty = np.linspace(0, binary_warped.shape[0]-1, binary_warped.shape[0] )
    window_img = np.zeros_like(out_img)
    
    
    if len(leftx) > 0:
        left_fit = np.polyfit(lefty, leftx, 2)
        left_fitx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2]
        if draw_img == True:
            out_img[nonzeroy[left_lane_inds], nonzerox[left_lane_inds]] = [255, 0, 0]
            left_line_window1 = np.array([np.transpose(np.vstack([left_fitx-margin, ploty]))])
            left_line_window2 = np.array([np.flipud(np.transpose(np.vstack([left_fitx+margin, ploty])))])
            left_line_pts = np.hstack((left_line_window1, left_line_window2))
            # Draw the lane onto the warped blank image
            cv2.fillPoly(window_img, np.int_([left_line_pts]), (0,255, 0))
        
    if len(rightx) > 0:
        right_fit = np.polyfit(righty, rightx, 2)
        right_fitx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2]
        if draw_img == True:
            out_img[nonzeroy[right_lane_inds], nonzerox[right_lane_inds]] = [0, 0, 255]
            right_line_window1 = np.array([np.transpose(np.vstack([right_fitx-margin, ploty]))])
            right_line_window2 = np.array([np.flipud(np.transpose(np.vstack([right_fitx+margin, ploty])))])
            right_line_pts = np.hstack((right_line_window1, right_line_window2))
            # Draw the lane onto the warped blank image
            cv2.fillPoly(window_img, np.int_([right_line_pts]), (0,255, 0))
 
    if draw_img == True:
        result = cv2.addWeighted(out_img, 0.6, window_img, 0.3, 0)
        #print(result)
        return result,left_fit,right_fit,left_fitx,right_fitx,ploty,None,None
    else:
        return None,left_fit,right_fit,left_fitx,right_fitx,ploty,None,None
    
def find_position(img,pts):
    # Find the position of the car from the center
    # It will show if the car is 'x' meters from the left or right
    image_shape = img.shape
    position = image_shape[1]/2
    left  = np.min(pts[(pts[:,1] < position) & (pts[:,0] > 700)][:,1])
    right = np.max(pts[(pts[:,1] > position) & (pts[:,0] > 700)][:,1])
    center = (left + right)/2
    # Define conversions in x and y from pixels space to meters
   
    return (position - center)*xm_per_pix

def draw_org_img(org_img,warped,left_fitx,right_fitx,ploty,MInv,curvature,position):
    
    lane_detected = True
    
    warp_zero = np.zeros_like(warped).astype(np.uint8)
    color_warp = np.dstack((warp_zero, warp_zero, warp_zero))
    
    #print("warped.shape: {}",format(warped.shape))
    #print("left_fitx: {}",format(left_fitx))
    #print("right_fitx: {}",format(right_fitx))
    
    
    # Recast the x and y points into usable format for cv2.fillPoly()
    pts_left = np.array([np.transpose(np.vstack([left_fitx, ploty]))])
    pts_right = np.array([np.flipud(np.transpose(np.vstack([right_fitx, ploty])))])
    pts = np.hstack((pts_left, pts_right))

    # Draw the lane onto the warped blank image
    cv2.fillPoly(color_warp, np.int_([pts]), (0,255, 0))
    cv2.polylines(color_warp, np.int32([pts_left]), isClosed=False, color=(255,0,255), thickness=15)
    cv2.polylines(color_warp, np.int32([pts_right]), isClosed=False, color=(0,255,255), thickness=15)

    # Warp the blank back to original image space using inverse perspective matrix (Minv)
    newwarp = cv2.warpPerspective(color_warp, MInv, (org_img.shape[1], org_img.shape[0])) 

    # Combine the result with the original image
    img_combined = cv2.addWeighted(org_img, 1, newwarp, 0.3, 0)
    #print("img_combined.shape: {}".format(img_combined.shape))

    font = cv2.FONT_HERSHEY_SIMPLEX
    text = "Radius of Curvature: {} m".format(int(curvature))
    cv2.putText(img_combined,text,(400,100), font, 1,(255,255,255),2)

    if position < 0:
        text = "Vehicle is {:.2f} m left of center".format(-position)
    else:
        text = "Vehicle is {:.2f} m right of center".format(position)
    
    cv2.putText(img_combined,text,(400,150), font, 1,(255,255,255),2)

    return img_combined
       
def points_distance(p1,p2):

        x1,y1 = p1[0],p1[1]
        x2,y2 = p2[0],p2[1]
        #line_distance = np.sqrt( (x2-x1)**2 + (y2-y1)**2 ) 
        #line_distance = (x2-x1)*xm_per_pix
        line_distance = (x2-x1)#*xm_per_pix
        return line_distance

    
    
def calc_curvature(img, fitx,fity):
        # Define conversions in x and y from pixels space to meters
        y_eval = np.max(fity)

        # Fit new polynomials to x,y in world space
        fit_cr = np.polyfit(fity*ym_per_pix, fitx*xm_per_pix, 2)
        curved = ((1 + (2*fit_cr[0]*y_eval + fit_cr[1])**2)**1.5) / np.absolute(2*fit_cr[0])
        return curved
    
def calc_both_curvature(img, left_fitx,left_fity,right_fitx,right_fity):
        # Define conversions in x and y from pixels space to meters

        ly_eval = np.max(left_fity)
        ry_eval = np.max(right_fity)
        
        # Fit new polynomials to x,y in world space
        lfit_cr = np.polyfit(left_fity*ym_per_pix, left_fitx*xm_per_pix, 2)
        lcurved = ((1 + (2*lfit_cr[0]*ly_eval + lfit_cr[1])**2)**1.5) / np.absolute(2*lfit_cr[0])
        rfit_cr = np.polyfit(right_fity*ym_per_pix, right_fitx*xm_per_pix, 2)
        rcurved = ((1 + (2*rfit_cr[0]*ry_eval + rfit_cr[1])**2)**1.5) / np.absolute(2*rfit_cr[0])
        
        
        return lcurved,rcurved     
    
def two_curvature_same(left_curverad,right_curverad,threshold=0.6):
        diff = abs(left_curverad - right_curverad)/right_curverad
        #print("diff {}".format(diff))
        return diff, diff < threshold
    
print('window functions complete.')
window functions complete.
In [693]:
np.array([False])
Out[693]:
array([False], dtype=bool)
In [64]:
class Line():
    def __init__(self,n_frames = 1,image_size = (1280,720), lane_side=None):
        # was the line detected in the last iteration?
        self.detected = False  
        # x values of the last n fits of the line
        self.recent_xfitted = None 
        #average x values of the fitted line over the last n iterations
        self.bestx = None     
        #polynomial coefficients averaged over the last n iterations
        self.best_fit = [0.,0.,0.]
        #polynomial coefficients for the most recent fit
        self.current_fit = [0.,0.,0.]
        #polynomial coefficients for the most recent fit
        self.prev_fit = [0.,0.,0.]
        #radius of curvature of the line in some units
        self.radius_of_curvature = None 
        #distance in meters of vehicle center from the line
        self.line_base_pos = None 
        #difference in fit coefficients between last and new fits
        self.diffs = [0.,0.,0.]
        #x values for detected line pixels
        self.allx = None  
        #y values for detected line pixels
        self.ally = None
        self.lane_side = lane_side
        
        self.image_size = image_size
        self.n_frames = n_frames;
        self.current_frame = 0
        self.frame_not_detected = 0
    
    def Xstr(self,val):
        if val is None:
            return " "
        else:
            return str(val)

    def Xstr_array(self,array_val):
        if array_val is None:
            return " "
        else:
            return str(array_val.shape)
           
            
    def __str__(self):
        if self.current_frame == 0:
            output = 'Line Not Initiated '
            output += "self.lane_side:             "+str(self.lane_side)+"\n"
        else:    
            
            output = ''
            output += "self.lane_side:            "+str(self.lane_side)+"\n"
            output += "self.detected:             "+str(self.detected)+"\n"
            output += "self.recent_xfitted.shape: "+self.Xstr_array(self.recent_xfitted)+"\n"
            output += "self.allx.shape:           "+self.Xstr_array(self.allx)+"\n"
            output += "self.ally.shape:           "+self.Xstr_array(self.ally)+"\n"
            output += "self.bestx.shape:          "+self.Xstr_array(self.bestx)+"\n"
            output += "self.best_fit:             "+self.Xstr(self.best_fit)+"\n"   
            output += "self.current_fit:          "+self.Xstr(self.current_fit)+"\n"   
            output += "self.prev_fit:             "+self.Xstr(self.prev_fit)+"\n"   
            output += "self.radius_of_curvature:  "+self.Xstr(self.radius_of_curvature)+" m\n"   
            output += "self.line_base_pos:        "+self.Xstr(self.line_base_pos)+" m\n"   
            output += "self.diffs:                "+self.Xstr(self.diffs)+" m\n"   
        return output
        
    def update_points(self,x,y):

        ##Validation Section
        assert len(x) == len(y), 'x and y have to be the same size'
        
        if len(x) > 0:
            self.detected = True
            self.frame_not_detected = 0
        else:
            self.detected = False
            self.frame_not_detected += 1
            return;
        
        #print("setting x,y in Line()")
        temp_current_fit = [0.,0.,0.]
        self.allx = x
        self.ally = y
        
        temp_current_fit = np.polyfit(self.allx, self.ally, 2)
        
        diff = abs(temp_current_fit - self.best_fit)
        
        if  self.recent_xfitted is None or \
            (diff[0] > 0.001 and diff[1] > 1.0 and diff[2] > 100.):
            self.recent_xfitted = np.array([self.allx])
            self.current_frame += 1
        elif self.current_frame > self.n_frames:
            self.current_frame = 1
            #self.recent_xfitted = np.array([self.allx])
            self.recent_xfitted = self.recent_xfitted[:-self.n_frames] 
            self.recent_xfitted = np.vstack([self.recent_xfitted,self.allx])
        else:    
            #self.recent_xfitted = np.array([self.allx])
            self.recent_xfitted = np.vstack([self.recent_xfitted,self.allx])
            self.current_frame += 1
        
        self.bestx = np.mean(np.array(self.recent_xfitted),axis=0)

        if self.current_fit is None:
            self.prev_fit = temp_current_fit
            self.current_fit = temp_current_fit
        else:
            self.prev_fit = self.current_fit
            self.current_fit = temp_current_fit

        self.best_fit = np.polyfit(self.bestx, self.ally, 2)
        
        self.diffs = abs(self.current_fit - self.best_fit)

        self.radius_of_curvature = self.calc_curvature(self.allx,self.ally)
        
        self.line_base_pos = self.calc_line_to_center_dist()
        
        #print("completed update()")
        
        
    def calc_line_to_center_dist(self):
        
        ym_per_pix = 30/720 # meters per pixel in y dimension
        xm_per_pix = 3.7/425 # meters per pixel in x dimension
        x1,y1 = self.allx[-1]*xm_per_pix, self.ally[-1]*ym_per_pix
        x2,y2 = (self.image_size[0]/2)*xm_per_pix,(self.image_size[1]/2)*ym_per_pix
        line_base_pos = np.sqrt( (x2-x1)**2 + (y2-y1)**2 ) 
        return line_base_pos
                
    def calc_curvature(self,fitx,fity):
        # Define conversions in x and y from pixels space to meters
        ym_per_pix = 30/720 # meters per pixel in y dimension
        xm_per_pix = 3.7/650 # meters per pixel in x dimension

        # Fit new polynomials to x,y in world space
        fit_cr = np.polyfit(fity*ym_per_pix, fitx*xm_per_pix, 2)

        y_eval = np.max(fity)
        curverad = ((1 + (2*fit_cr[0]*y_eval + fit_cr[1])**2)**1.5) / np.absolute(2*fit_cr[0])
        
        return curverad
        

print("Line complete")
Line complete
In [112]:
from PIL import Image

def img_process(img):
    global img_cnt
    
    undist = undistort(img,ret,mtx,dist,rvecs,tvecs)
    M,MInv,warped = corner_unwarp(undist)
    
    image_rgb = warped
    r_channel = image_rgb[:,:,0]
    g_channel = image_rgb[:,:,1]
    b_channel = image_rgb[:,:,2]
    
    
    image_hls = cv2.cvtColor(warped, cv2.COLOR_RGB2HLS)
    h_hls_channel = image_hls[:,:,0]
    l_hls_channel = image_hls[:,:,1]
    s_hls_channel = image_hls[:,:,2]
    
    ksize = 3
    # Apply each of the thresholding functions
    gradx = abs_sobel_thresh(s_hls_channel, orient='x', sobel_kernel=ksize, thresh=(50, 255))
    grady = abs_sobel_thresh(s_hls_channel, orient='y', sobel_kernel=ksize, thresh=(120, 255))
    mag_binary = mag_thresh(s_hls_channel, sobel_kernel=ksize, mag_thresh=(10, 255))
    dir_binary = dir_threshold(s_hls_channel, sobel_kernel=ksize, thresh=(0,np.pi/2))
    
     #Threshold on yellow and white color mask
    lower = np.uint8([  0, 200,   0])
    upper = np.uint8([255, 255, 255])
    white_mask = cv2.inRange(image_hls, lower, upper)
    # yellow color mask
    lower = np.uint8([ 10,   0, 100])
    upper = np.uint8([ 40, 255, 255])
    yellow_mask = cv2.inRange(image_hls, lower, upper)
    # combine the mask
    mask_wy = cv2.bitwise_or(white_mask, yellow_mask)

    #filter on light channel to handle shadows on road.    
    l_hls_channel[l_hls_channel > 100] = 1
    
    combined = np.zeros_like(dir_binary)
    combined[((gradx == 1) & (grady == 1)) | ((mag_binary == 1) & (dir_binary == 1)) | mask_wy == 255 | (l_hls_channel == 1)  ] = 1

    # Masking Region of interest
    region_of_interest = np.array([[[150,0],[1200,0],[1200,720],[150,720]]], np.int32)
    
    mask = np.zeros_like(combined)
    if len(img.shape) > 2:
        channel_count = img.shape[2]  # i.e. 3 or 4 depending on your image
        ignore_mask_color = (255,) * channel_count
    else:
        ignore_mask_color = 255

    cv2.fillPoly(mask, region_of_interest, ignore_mask_color)
    
    masked_image = cv2.bitwise_and(combined, mask)
    
    
    #im = Image.fromarray(img.astype(np.uint8))
    #im.save("./test_white1/"+str(img_cnt)+"_img.jpg")

    #im = Image.fromarray(warped.astype(np.uint8))
    #im.save("./test_white1/"+str(img_cnt)+"_warped.jpg")

    #im = Image.fromarray(combined.astype(np.uint8))
    #im.save("./test_white1/"+str(img_cnt)+"_combined.jpg")
    
    #im = Image.fromarray(masked_image.astype(np.uint8))
    #im.save("./test_white1/"+str(img_cnt)+"_masked.jpg")
    
    result,left_fit,right_fit,left_fitx,right_fitx,ploty,rect_box_data,histogram = find_histogram_lane(masked_image,True)
    #im = Image.fromarray(result.astype(np.uint8))
    #im.save("./test_white1/"+str(img_cnt)+"_result.jpg")
    #print("plot results")

    right_fit_diff = [0.,0.,0.]
    left_fit_diff = [0.,0.,0.]
    lcurved,rcurved = 0.,0.
    
    pd_thresh = 50 #Allowed threshold 40 pixels
    
    #print("length ",len(left_fitx),len(right_fitx))
    
    if len(left_fitx) > 0 and len(right_fitx) > 0:
        
        ##find if lines are almost parallel
        left_top_point = [left_fitx[100],ploty[100]]
        left_mid_point = [left_fitx[300],ploty[300]]
        left_bottom_point = [left_fitx[600],ploty[600]]

        right_top_point = [right_fitx[100],ploty[100]]
        right_mid_point = [right_fitx[300],ploty[300]]
        right_bottom_point = [right_fitx[600],ploty[600]]
        
        top_pd = points_distance(left_top_point,right_top_point)
        mid_pd = points_distance(left_mid_point,right_mid_point)
        bot_pd = points_distance(left_bottom_point,right_bottom_point)
        
        avg_pd = (top_pd+mid_pd+bot_pd)/3
        
        #print("top_pd: {} mid_pd: {} bot_pd: {} avg_pd : {}".format(top_pd,mid_pd,bot_pd,avg_pd))
        
        lcurved = calc_curvature(masked_image,left_fitx,ploty)
        rcurved = calc_curvature(masked_image,right_fitx,ploty)
        
        if  abs(top_pd - avg_pd) < pd_thresh and \
            abs(mid_pd - avg_pd) < pd_thresh and \
            abs(bot_pd - avg_pd) < pd_thresh:
            
            #print("---------Land distance within threshold-----------")
            left_lane.update_points(left_fitx,ploty)
            right_lane.update_points(right_fitx,ploty)
            #print(left_lane)
            #print(right_lane)
            #diff,curves_same = two_curvature_same(lcurved,rcurved)    
            center = 640
            left_x = left_fitx[-1]
            right_x = right_fitx[-1]
            lane_center = (right_x + left_x)/2
            pos = (center - lane_center)*xm_per_pix

            overlap_img = draw_org_img(undist,masked_image,left_lane.bestx,right_lane.bestx,ploty,MInv,rcurved,pos)
        else:    
            if left_lane.bestx is not None and right_lane.bestx is not None:
                rcurved = calc_curvature(masked_image,right_lane.bestx,ploty)
                lcurved = calc_curvature(masked_image,left_lane.bestx,ploty)

                center = 640
                left_x = left_lane.bestx[-1]
                right_x = right_lane.bestx[-1]
                lane_center = (right_x + left_x)/2
 
                pos = (center - lane_center)*xm_per_pix
                overlap_img = draw_org_img(undist,masked_image,left_lane.bestx,right_lane.bestx,ploty,MInv,rcurved,pos)
            else:
                rcurved,lcurved = 0.,0.
                pos = 0
                overlap_img = undist
    else:
        if left_lane.bestx is not None and right_lane.bestx is not None:
            rcurved = calc_curvature(masked_image,right_lane.bestx,ploty)
            lcurved = calc_curvature(masked_image,left_lane.bestx,ploty)

            center = 640
            left_x = left_lane.bestx[-1]
            right_x = right_lane.bestx[-1]
            lane_center = (right_x + left_x)/2

            pos = (center - lane_center)*xm_per_pix
            overlap_img = draw_org_img(undist,masked_image,left_lane.bestx,right_lane.bestx,ploty,MInv,rcurved,pos)
        else:
            rcurved,lcurved = 0.,0.
            pos = 0
            overlap_img = undist
    
    #plt.imshow(overlap_img)
    #plt.savefig("./test_white1/"+str(img_cnt)+"_overlap_img.jpg")
    img_cnt += 1  
    return overlap_img
    #return result,histogram, warped, combined, overlap_img,left_fitx,right_fitx,ploty
    #return result,histogram, warped, masked_image, overlap_img,left_fitx,right_fitx,ploty,undist,combined
In [110]:
camera_calib_pickle_file="./camera_calibrate.p"
ret,mtx,dist,rvecs,tvecs = getCalibrationParam(camera_calib_pickle_file)
img_cnt = 1
test_img_dir = './test_images'
images = glob.glob(test_img_dir+"/*.jpg")
#images = ["./test_images/test5.jpg","./test_images/straight_lines2.jpg"]
#Choose a Sobel kernel size
ksize = 3 # Choose a larger odd number to smooth gradient measurements

left_lane = Line(1,(720,1280),'left')
right_lane = Line(1,(720,1280),'right')

c=1
for fname in images:
    #img = cv2.imread(fname)
    img = mpimg.imread(fname)
    result,histogram, warped,  masked_image, overlap_img,left_fitx,right_fitx,ploty,undist,combined = img_process(img)
   
    f11, (ax1) = plt.subplots(1, 1, figsize=(24, 9))
    f11.tight_layout()
    ax1.imshow(img)
    ax1.set_title("original image")
    f12, (ax2) = plt.subplots(1, 1, figsize=(24, 9))
    f12.tight_layout()
    ax2.imshow(undist)
    ax2.set_title("undistorted image")
    plt.subplots_adjust(left=0., right=1, top=0.9, bottom=0.)
    
    f21, (ax3) = plt.subplots(1, 1, figsize=(24, 9))
    f21.tight_layout()
    ax3.imshow(warped)
    ax3.set_title("warped image")
    f22, (ax4) = plt.subplots(1, 1, figsize=(24, 9))
    f22.tight_layout()
    ax4.imshow(masked_image)
    ax4.set_title('Sobel Thresholding', fontsize=20)
    plt.subplots_adjust(left=0., right=1, top=0.9, bottom=0.)
    
    f31, (ax5) = plt.subplots(1, 1, figsize=(24, 9))
    f31.tight_layout()
    ax5.imshow(result)
    ax5.set_title("Histogram based lane markings")
    if len(left_fitx) > 0:
        ax5.plot(left_fitx, ploty, color='yellow')
    if len(right_fitx) > 0:    
        ax5.plot(right_fitx, ploty, color='yellow')

    f32, (ax6) = plt.subplots(1, 1, figsize=(24, 9))
    f32.tight_layout()
    ax6.imshow(overlap_img)
    ax6.set_title("Image with lane marking")
    plt.subplots_adjust(left=0., right=1, top=0.9, bottom=0.)

    f33, (ax7) = plt.subplots(1, 1, figsize=(24, 9))
    f33.tight_layout()
    ax7.imshow(combined)
    ax7.set_title("combined")
    plt.subplots_adjust(left=0., right=1, top=0.9, bottom=0.)
    
    
    f11.savefig("./output_images/new_original_"+str(c)+".jpg")
    f12.savefig("./output_images/new_undistorted_"+str(c)+".jpg")
    f21.savefig("./output_images/new_warped_"+str(c)+".jpg")
    f22.savefig("./output_images/new_sobel_"+str(c)+".jpg")
    f31.savefig("./output_images/new_histogram_"+str(c)+".jpg")
    f32.savefig("./output_images/new_lane_mark_"+str(c)+".jpg")
    
    
    c += 1
self.lane_side:            left
self.detected:             True
self.recent_xfitted.shape: (1, 720)
self.allx.shape:           (720,)
self.ally.shape:           (720,)
self.bestx.shape:          (720,)
self.best_fit:             [  2.32524504e-02  -1.01567598e+01   1.16026153e+03]
self.current_fit:          [  2.32524504e-02  -1.01567598e+01   1.16026153e+03]
self.prev_fit:             [0.0, 0.0, 0.0]
self.radius_of_curvature:  3318.47187678 m
self.line_base_pos:        3.29310820949 m
self.diffs:                [ 0.  0.  0.] m

self.lane_side:            right
self.detected:             True
self.recent_xfitted.shape: (1, 720)
self.allx.shape:           (720,)
self.ally.shape:           (720,)
self.bestx.shape:          (720,)
self.best_fit:             [  9.78403128e-03  -1.57865909e+01   6.38731380e+03]
self.current_fit:          [  9.78403128e-03  -1.57865909e+01   6.38731380e+03]
self.prev_fit:             [0.0, 0.0, 0.0]
self.radius_of_curvature:  2651.42896245 m
self.line_base_pos:        6.96245667006 m
self.diffs:                [ 0.  0.  0.] m

self.lane_side:            left
self.detected:             True
self.recent_xfitted.shape: (2, 720)
self.allx.shape:           (720,)
self.ally.shape:           (720,)
self.bestx.shape:          (720,)
self.best_fit:             [  2.32524504e-02  -1.01567598e+01   1.16026153e+03]
self.current_fit:          [  2.32524504e-02  -1.01567598e+01   1.16026153e+03]
self.prev_fit:             [  2.32524504e-02  -1.01567598e+01   1.16026153e+03]
self.radius_of_curvature:  3318.47187678 m
self.line_base_pos:        3.29310820949 m
self.diffs:                [ 0.  0.  0.] m

self.lane_side:            right
self.detected:             True
self.recent_xfitted.shape: (2, 720)
self.allx.shape:           (720,)
self.ally.shape:           (720,)
self.bestx.shape:          (720,)
self.best_fit:             [  9.78403128e-03  -1.57865909e+01   6.38731380e+03]
self.current_fit:          [  9.78403128e-03  -1.57865909e+01   6.38731380e+03]
self.prev_fit:             [  9.78403128e-03  -1.57865909e+01   6.38731380e+03]
self.radius_of_curvature:  2651.42896245 m
self.line_base_pos:        6.96245667006 m
self.diffs:                [ 0.  0.  0.] m

In [115]:
### Import everything needed to edit/save/watch video clips
from moviepy.editor import VideoFileClip
from IPython.display import HTML

img_cnt = 1
#Camera Calibration parameters
camera_calib_pickle_file="./camera_calibrate.p"
ret,mtx,dist,rvecs,tvecs = getCalibrationParam(camera_calib_pickle_file)
# Set up lines for left and right
left_lane = Line(3,(720,1280),'left')
right_lane = Line(3,(720,1280),'right')
white_output = 'white.mp4'
clip1 = VideoFileClip("project_video.mp4")
white_clip = clip1.fl_image(img_process) #NOTE: this function expects color images!!
%time white_clip.write_videofile(white_output, audio=False)
[MoviePy] >>>> Building video white.mp4
[MoviePy] Writing video white.mp4








  0%|          | 0/1261 [00:00<?, ?it/s]








  0%|          | 1/1261 [00:00<07:59,  2.63it/s]








  0%|          | 2/1261 [00:00<08:07,  2.58it/s]








  0%|          | 3/1261 [00:01<07:51,  2.67it/s]








  0%|          | 4/1261 [00:01<08:03,  2.60it/s]








  0%|          | 5/1261 [00:01<07:58,  2.63it/s]








  0%|          | 6/1261 [00:02<07:58,  2.63it/s]








  1%|          | 7/1261 [00:02<08:04,  2.59it/s]








  1%|          | 8/1261 [00:03<07:42,  2.71it/s]








  1%|          | 9/1261 [00:03<07:44,  2.70it/s]








  1%|          | 10/1261 [00:03<07:28,  2.79it/s]








  1%|          | 11/1261 [00:04<07:12,  2.89it/s]








  1%|          | 12/1261 [00:04<07:38,  2.73it/s]








  1%|          | 13/1261 [00:04<08:06,  2.57it/s]








  1%|          | 14/1261 [00:05<07:52,  2.64it/s]








  1%|          | 15/1261 [00:05<07:28,  2.78it/s]








  1%|▏         | 16/1261 [00:05<07:20,  2.83it/s]








  1%|▏         | 17/1261 [00:06<07:12,  2.88it/s]








  1%|▏         | 18/1261 [00:06<07:01,  2.95it/s]








  2%|▏         | 19/1261 [00:06<07:06,  2.91it/s]








  2%|▏         | 20/1261 [00:07<07:07,  2.90it/s]








  2%|▏         | 21/1261 [00:07<07:03,  2.93it/s]








  2%|▏         | 22/1261 [00:07<07:18,  2.83it/s]








  2%|▏         | 23/1261 [00:08<07:04,  2.91it/s]








  2%|▏         | 24/1261 [00:08<07:20,  2.81it/s]








  2%|▏         | 25/1261 [00:09<07:30,  2.74it/s]








  2%|▏         | 26/1261 [00:09<07:19,  2.81it/s]








  2%|▏         | 27/1261 [00:09<07:10,  2.86it/s]








  2%|▏         | 28/1261 [00:10<07:10,  2.86it/s]








  2%|▏         | 29/1261 [00:10<07:06,  2.89it/s]








  2%|▏         | 30/1261 [00:10<07:01,  2.92it/s]








  2%|▏         | 31/1261 [00:11<07:08,  2.87it/s]








  3%|▎         | 32/1261 [00:11<06:58,  2.94it/s]








  3%|▎         | 33/1261 [00:11<07:02,  2.91it/s]








  3%|▎         | 34/1261 [00:12<07:00,  2.92it/s]








  3%|▎         | 35/1261 [00:12<06:54,  2.96it/s]








  3%|▎         | 36/1261 [00:12<06:43,  3.04it/s]








  3%|▎         | 37/1261 [00:13<06:47,  3.00it/s]








  3%|▎         | 38/1261 [00:13<06:43,  3.03it/s]








  3%|▎         | 39/1261 [00:13<06:41,  3.04it/s]








  3%|▎         | 40/1261 [00:14<06:48,  2.99it/s]








  3%|▎         | 41/1261 [00:14<06:47,  3.00it/s]








  3%|▎         | 42/1261 [00:14<06:46,  3.00it/s]








  3%|▎         | 43/1261 [00:15<06:40,  3.04it/s]








  3%|▎         | 44/1261 [00:15<07:07,  2.85it/s]








  4%|▎         | 45/1261 [00:15<07:01,  2.89it/s]








  4%|▎         | 46/1261 [00:16<07:02,  2.88it/s]








  4%|▎         | 47/1261 [00:16<07:15,  2.79it/s]








  4%|▍         | 48/1261 [00:16<07:18,  2.76it/s]








  4%|▍         | 49/1261 [00:17<07:11,  2.81it/s]








  4%|▍         | 50/1261 [00:17<07:05,  2.85it/s]








  4%|▍         | 51/1261 [00:17<06:54,  2.92it/s]








  4%|▍         | 52/1261 [00:18<07:10,  2.81it/s]








  4%|▍         | 53/1261 [00:18<07:01,  2.87it/s]








  4%|▍         | 54/1261 [00:19<07:04,  2.84it/s]








  4%|▍         | 55/1261 [00:19<07:02,  2.86it/s]








  4%|▍         | 56/1261 [00:19<06:57,  2.88it/s]








  5%|▍         | 57/1261 [00:20<07:14,  2.77it/s]








  5%|▍         | 58/1261 [00:20<07:15,  2.76it/s]








  5%|▍         | 59/1261 [00:20<07:08,  2.81it/s]








  5%|▍         | 60/1261 [00:21<06:58,  2.87it/s]








  5%|▍         | 61/1261 [00:21<07:06,  2.82it/s]








  5%|▍         | 62/1261 [00:21<07:10,  2.79it/s]








  5%|▍         | 63/1261 [00:22<06:53,  2.90it/s]








  5%|▌         | 64/1261 [00:22<07:19,  2.73it/s]








  5%|▌         | 65/1261 [00:22<07:28,  2.67it/s]








  5%|▌         | 66/1261 [00:23<07:06,  2.81it/s]








  5%|▌         | 67/1261 [00:23<07:12,  2.76it/s]








  5%|▌         | 68/1261 [00:24<06:58,  2.85it/s]








  5%|▌         | 69/1261 [00:24<06:59,  2.84it/s]








  6%|▌         | 70/1261 [00:24<07:01,  2.83it/s]








  6%|▌         | 71/1261 [00:25<07:03,  2.81it/s]








  6%|▌         | 72/1261 [00:25<07:00,  2.83it/s]








  6%|▌         | 73/1261 [00:25<07:10,  2.76it/s]








  6%|▌         | 74/1261 [00:26<06:57,  2.84it/s]








  6%|▌         | 75/1261 [00:26<07:01,  2.81it/s]








  6%|▌         | 76/1261 [00:26<07:23,  2.67it/s]








  6%|▌         | 77/1261 [00:27<07:24,  2.66it/s]








  6%|▌         | 78/1261 [00:27<07:12,  2.73it/s]








  6%|▋         | 79/1261 [00:28<07:13,  2.73it/s]








  6%|▋         | 80/1261 [00:28<07:17,  2.70it/s]








  6%|▋         | 81/1261 [00:28<07:17,  2.69it/s]








  7%|▋         | 82/1261 [00:29<07:15,  2.71it/s]








  7%|▋         | 83/1261 [00:29<07:25,  2.65it/s]








  7%|▋         | 84/1261 [00:29<07:19,  2.68it/s]








  7%|▋         | 85/1261 [00:30<07:16,  2.69it/s]








  7%|▋         | 86/1261 [00:30<07:25,  2.64it/s]








  7%|▋         | 87/1261 [00:31<07:21,  2.66it/s]








  7%|▋         | 88/1261 [00:31<07:11,  2.72it/s]








  7%|▋         | 89/1261 [00:31<07:08,  2.74it/s]








  7%|▋         | 90/1261 [00:32<07:17,  2.68it/s]








  7%|▋         | 91/1261 [00:32<07:13,  2.70it/s]








  7%|▋         | 92/1261 [00:32<07:15,  2.68it/s]








  7%|▋         | 93/1261 [00:33<07:30,  2.59it/s]








  7%|▋         | 94/1261 [00:33<07:22,  2.64it/s]








  8%|▊         | 95/1261 [00:34<07:40,  2.53it/s]








  8%|▊         | 96/1261 [00:34<08:03,  2.41it/s]








  8%|▊         | 97/1261 [00:34<07:44,  2.51it/s]








  8%|▊         | 98/1261 [00:35<07:42,  2.51it/s]








  8%|▊         | 99/1261 [00:35<07:32,  2.57it/s]








  8%|▊         | 100/1261 [00:36<07:22,  2.62it/s]








  8%|▊         | 101/1261 [00:36<07:17,  2.65it/s]








  8%|▊         | 102/1261 [00:36<07:11,  2.68it/s]








  8%|▊         | 103/1261 [00:37<07:08,  2.70it/s]








  8%|▊         | 104/1261 [00:37<07:17,  2.64it/s]








  8%|▊         | 105/1261 [00:37<07:08,  2.70it/s]








  8%|▊         | 106/1261 [00:38<07:53,  2.44it/s]








  8%|▊         | 107/1261 [00:38<07:31,  2.55it/s]








  9%|▊         | 108/1261 [00:39<07:32,  2.55it/s]








  9%|▊         | 109/1261 [00:39<07:28,  2.57it/s]








  9%|▊         | 110/1261 [00:39<07:26,  2.58it/s]








  9%|▉         | 111/1261 [00:40<07:12,  2.66it/s]








  9%|▉         | 112/1261 [00:40<07:10,  2.67it/s]








  9%|▉         | 113/1261 [00:40<06:57,  2.75it/s]








  9%|▉         | 114/1261 [00:41<07:02,  2.71it/s]








  9%|▉         | 115/1261 [00:41<07:11,  2.66it/s]








  9%|▉         | 116/1261 [00:42<06:56,  2.75it/s]








  9%|▉         | 117/1261 [00:42<06:54,  2.76it/s]








  9%|▉         | 118/1261 [00:42<07:36,  2.50it/s]








  9%|▉         | 119/1261 [00:43<07:46,  2.45it/s]








 10%|▉         | 120/1261 [00:43<07:32,  2.52it/s]








 10%|▉         | 121/1261 [00:44<07:24,  2.56it/s]








 10%|▉         | 122/1261 [00:44<07:31,  2.52it/s]








 10%|▉         | 123/1261 [00:44<07:15,  2.61it/s]








 10%|▉         | 124/1261 [00:45<07:11,  2.64it/s]








 10%|▉         | 125/1261 [00:45<07:09,  2.64it/s]








 10%|▉         | 126/1261 [00:45<07:20,  2.57it/s]








 10%|█         | 127/1261 [00:46<07:20,  2.57it/s]








 10%|█         | 128/1261 [00:46<07:10,  2.63it/s]








 10%|█         | 129/1261 [00:47<07:05,  2.66it/s]








 10%|█         | 130/1261 [00:47<07:20,  2.57it/s]








 10%|█         | 131/1261 [00:47<07:20,  2.56it/s]








 10%|█         | 132/1261 [00:48<07:10,  2.62it/s]








 11%|█         | 133/1261 [00:48<07:13,  2.60it/s]








 11%|█         | 134/1261 [00:49<07:21,  2.55it/s]








 11%|█         | 135/1261 [00:49<07:22,  2.54it/s]








 11%|█         | 136/1261 [00:49<07:08,  2.62it/s]








 11%|█         | 137/1261 [00:50<07:14,  2.59it/s]








 11%|█         | 138/1261 [00:50<07:26,  2.52it/s]








 11%|█         | 139/1261 [00:51<07:22,  2.54it/s]








 11%|█         | 140/1261 [00:51<07:26,  2.51it/s]








 11%|█         | 141/1261 [00:51<07:15,  2.57it/s]








 11%|█▏        | 142/1261 [00:52<07:21,  2.54it/s]








 11%|█▏        | 143/1261 [00:52<07:25,  2.51it/s]








 11%|█▏        | 144/1261 [00:52<07:10,  2.60it/s]








 11%|█▏        | 145/1261 [00:53<07:09,  2.60it/s]








 12%|█▏        | 146/1261 [00:53<07:09,  2.59it/s]








 12%|█▏        | 147/1261 [00:54<06:55,  2.68it/s]








 12%|█▏        | 148/1261 [00:54<07:01,  2.64it/s]








 12%|█▏        | 149/1261 [00:54<06:43,  2.76it/s]








 12%|█▏        | 150/1261 [00:55<07:15,  2.55it/s]








 12%|█▏        | 151/1261 [00:55<07:04,  2.61it/s]








 12%|█▏        | 152/1261 [00:56<07:05,  2.61it/s]








 12%|█▏        | 153/1261 [00:56<07:20,  2.51it/s]








 12%|█▏        | 154/1261 [00:56<07:17,  2.53it/s]








 12%|█▏        | 155/1261 [00:57<07:09,  2.57it/s]








 12%|█▏        | 156/1261 [00:57<07:11,  2.56it/s]








 12%|█▏        | 157/1261 [00:57<07:08,  2.58it/s]








 13%|█▎        | 158/1261 [00:58<07:24,  2.48it/s]








 13%|█▎        | 159/1261 [00:58<07:14,  2.54it/s]








 13%|█▎        | 160/1261 [00:59<07:17,  2.52it/s]








 13%|█▎        | 161/1261 [00:59<07:25,  2.47it/s]








 13%|█▎        | 162/1261 [01:00<07:31,  2.44it/s]








 13%|█▎        | 163/1261 [01:00<07:10,  2.55it/s]








 13%|█▎        | 164/1261 [01:00<07:07,  2.57it/s]








 13%|█▎        | 165/1261 [01:01<06:53,  2.65it/s]








 13%|█▎        | 166/1261 [01:01<06:44,  2.71it/s]








 13%|█▎        | 167/1261 [01:01<06:59,  2.61it/s]








 13%|█▎        | 168/1261 [01:02<06:52,  2.65it/s]








 13%|█▎        | 169/1261 [01:02<06:46,  2.68it/s]








 13%|█▎        | 170/1261 [01:02<06:47,  2.68it/s]








 14%|█▎        | 171/1261 [01:03<06:47,  2.67it/s]








 14%|█▎        | 172/1261 [01:03<06:58,  2.60it/s]








 14%|█▎        | 173/1261 [01:04<07:00,  2.59it/s]








 14%|█▍        | 174/1261 [01:04<06:51,  2.64it/s]








 14%|█▍        | 175/1261 [01:04<06:59,  2.59it/s]








 14%|█▍        | 176/1261 [01:05<07:01,  2.57it/s]








 14%|█▍        | 177/1261 [01:05<06:55,  2.61it/s]








 14%|█▍        | 178/1261 [01:06<07:10,  2.51it/s]








 14%|█▍        | 179/1261 [01:06<07:04,  2.55it/s]








 14%|█▍        | 180/1261 [01:06<07:10,  2.51it/s]








 14%|█▍        | 181/1261 [01:07<06:48,  2.64it/s]








 14%|█▍        | 182/1261 [01:07<06:43,  2.68it/s]








 15%|█▍        | 183/1261 [01:08<06:45,  2.66it/s]








 15%|█▍        | 184/1261 [01:08<06:46,  2.65it/s]








 15%|█▍        | 185/1261 [01:08<06:49,  2.63it/s]








 15%|█▍        | 186/1261 [01:09<07:07,  2.51it/s]








 15%|█▍        | 187/1261 [01:09<06:53,  2.60it/s]








 15%|█▍        | 188/1261 [01:09<06:51,  2.61it/s]








 15%|█▍        | 189/1261 [01:10<07:02,  2.54it/s]








 15%|█▌        | 190/1261 [01:10<06:52,  2.59it/s]








 15%|█▌        | 191/1261 [01:11<06:58,  2.56it/s]








 15%|█▌        | 192/1261 [01:11<07:10,  2.48it/s]








 15%|█▌        | 193/1261 [01:11<07:08,  2.49it/s]








 15%|█▌        | 194/1261 [01:12<07:11,  2.47it/s]








 15%|█▌        | 195/1261 [01:12<07:10,  2.47it/s]








 16%|█▌        | 196/1261 [01:13<07:01,  2.53it/s]








 16%|█▌        | 197/1261 [01:13<07:12,  2.46it/s]








 16%|█▌        | 198/1261 [01:14<07:32,  2.35it/s]








 16%|█▌        | 199/1261 [01:14<07:23,  2.39it/s]








 16%|█▌        | 200/1261 [01:14<07:12,  2.45it/s]








 16%|█▌        | 201/1261 [01:15<06:55,  2.55it/s]








 16%|█▌        | 202/1261 [01:15<07:20,  2.41it/s]








 16%|█▌        | 203/1261 [01:16<07:21,  2.40it/s]








 16%|█▌        | 204/1261 [01:16<07:13,  2.44it/s]








 16%|█▋        | 205/1261 [01:16<07:22,  2.39it/s]








 16%|█▋        | 206/1261 [01:17<07:11,  2.44it/s]








 16%|█▋        | 207/1261 [01:17<07:00,  2.51it/s]








 16%|█▋        | 208/1261 [01:18<07:07,  2.46it/s]








 17%|█▋        | 209/1261 [01:18<07:13,  2.42it/s]








 17%|█▋        | 210/1261 [01:19<07:41,  2.28it/s]








 17%|█▋        | 211/1261 [01:19<07:39,  2.29it/s]








 17%|█▋        | 212/1261 [01:19<07:27,  2.35it/s]








 17%|█▋        | 213/1261 [01:20<07:14,  2.41it/s]








 17%|█▋        | 214/1261 [01:20<07:44,  2.25it/s]








 17%|█▋        | 215/1261 [01:21<07:22,  2.36it/s]








 17%|█▋        | 216/1261 [01:21<07:03,  2.47it/s]








 17%|█▋        | 217/1261 [01:21<07:17,  2.39it/s]








 17%|█▋        | 218/1261 [01:22<07:29,  2.32it/s]








 17%|█▋        | 219/1261 [01:22<07:01,  2.47it/s]








 17%|█▋        | 220/1261 [01:23<06:54,  2.51it/s]








 18%|█▊        | 221/1261 [01:23<06:36,  2.62it/s]








 18%|█▊        | 222/1261 [01:23<06:18,  2.74it/s]








 18%|█▊        | 223/1261 [01:24<06:15,  2.77it/s]








 18%|█▊        | 224/1261 [01:24<06:14,  2.77it/s]








 18%|█▊        | 225/1261 [01:24<06:21,  2.72it/s]








 18%|█▊        | 226/1261 [01:25<06:15,  2.76it/s]








 18%|█▊        | 227/1261 [01:25<06:09,  2.80it/s]








 18%|█▊        | 228/1261 [01:26<06:23,  2.69it/s]








 18%|█▊        | 229/1261 [01:26<06:50,  2.51it/s]








 18%|█▊        | 230/1261 [01:27<07:35,  2.26it/s]








 18%|█▊        | 231/1261 [01:27<07:45,  2.21it/s]








 18%|█▊        | 232/1261 [01:27<07:26,  2.31it/s]








 18%|█▊        | 233/1261 [01:28<07:18,  2.35it/s]








 19%|█▊        | 234/1261 [01:28<07:19,  2.34it/s]








 19%|█▊        | 235/1261 [01:29<07:27,  2.29it/s]








 19%|█▊        | 236/1261 [01:29<07:21,  2.32it/s]








 19%|█▉        | 237/1261 [01:30<07:15,  2.35it/s]








 19%|█▉        | 238/1261 [01:30<07:24,  2.30it/s]








 19%|█▉        | 239/1261 [01:30<07:17,  2.34it/s]








 19%|█▉        | 240/1261 [01:31<07:25,  2.29it/s]








 19%|█▉        | 241/1261 [01:31<07:27,  2.28it/s]








 19%|█▉        | 242/1261 [01:32<07:11,  2.36it/s]








 19%|█▉        | 243/1261 [01:32<07:09,  2.37it/s]








 19%|█▉        | 244/1261 [01:32<07:09,  2.37it/s]








 19%|█▉        | 245/1261 [01:33<07:10,  2.36it/s]








 20%|█▉        | 246/1261 [01:33<07:08,  2.37it/s]








 20%|█▉        | 247/1261 [01:34<07:07,  2.37it/s]








 20%|█▉        | 248/1261 [01:34<07:03,  2.39it/s]








 20%|█▉        | 249/1261 [01:35<07:00,  2.41it/s]








 20%|█▉        | 250/1261 [01:35<07:00,  2.41it/s]








 20%|█▉        | 251/1261 [01:35<07:02,  2.39it/s]








 20%|█▉        | 252/1261 [01:36<07:03,  2.38it/s]








 20%|██        | 253/1261 [01:36<06:58,  2.41it/s]








 20%|██        | 254/1261 [01:37<06:59,  2.40it/s]








 20%|██        | 255/1261 [01:37<07:20,  2.28it/s]








 20%|██        | 256/1261 [01:38<07:10,  2.33it/s]








 20%|██        | 257/1261 [01:38<06:56,  2.41it/s]








 20%|██        | 258/1261 [01:38<06:56,  2.41it/s]








 21%|██        | 259/1261 [01:39<06:42,  2.49it/s]








 21%|██        | 260/1261 [01:39<06:50,  2.44it/s]








 21%|██        | 261/1261 [01:40<07:08,  2.33it/s]








 21%|██        | 262/1261 [01:40<07:03,  2.36it/s]








 21%|██        | 263/1261 [01:40<06:49,  2.44it/s]








 21%|██        | 264/1261 [01:41<06:34,  2.53it/s]








 21%|██        | 265/1261 [01:41<06:37,  2.51it/s]








 21%|██        | 266/1261 [01:42<06:58,  2.37it/s]








 21%|██        | 267/1261 [01:42<07:05,  2.34it/s]








 21%|██▏       | 268/1261 [01:43<07:09,  2.31it/s]








 21%|██▏       | 269/1261 [01:43<07:20,  2.25it/s]








 21%|██▏       | 270/1261 [01:43<07:27,  2.21it/s]








 21%|██▏       | 271/1261 [01:44<07:10,  2.30it/s]








 22%|██▏       | 272/1261 [01:44<06:54,  2.38it/s]








 22%|██▏       | 273/1261 [01:45<07:00,  2.35it/s]








 22%|██▏       | 274/1261 [01:45<06:46,  2.43it/s]








 22%|██▏       | 275/1261 [01:46<06:45,  2.43it/s]








 22%|██▏       | 276/1261 [01:46<06:38,  2.47it/s]








 22%|██▏       | 277/1261 [01:46<06:38,  2.47it/s]








 22%|██▏       | 278/1261 [01:47<06:35,  2.48it/s]








 22%|██▏       | 279/1261 [01:47<06:29,  2.52it/s]








 22%|██▏       | 280/1261 [01:47<06:33,  2.49it/s]








 22%|██▏       | 281/1261 [01:48<06:22,  2.56it/s]








 22%|██▏       | 282/1261 [01:48<06:30,  2.50it/s]








 22%|██▏       | 283/1261 [01:49<06:30,  2.50it/s]








 23%|██▎       | 284/1261 [01:49<06:43,  2.42it/s]








 23%|██▎       | 285/1261 [01:49<06:33,  2.48it/s]








 23%|██▎       | 286/1261 [01:50<06:30,  2.50it/s]








 23%|██▎       | 287/1261 [01:50<06:17,  2.58it/s]








 23%|██▎       | 288/1261 [01:51<06:18,  2.57it/s]








 23%|██▎       | 289/1261 [01:51<06:24,  2.53it/s]








 23%|██▎       | 290/1261 [01:52<06:48,  2.38it/s]








 23%|██▎       | 291/1261 [01:52<07:02,  2.29it/s]








 23%|██▎       | 292/1261 [01:52<06:59,  2.31it/s]








 23%|██▎       | 293/1261 [01:53<06:53,  2.34it/s]








 23%|██▎       | 294/1261 [01:53<06:37,  2.43it/s]








 23%|██▎       | 295/1261 [01:54<06:39,  2.42it/s]








 23%|██▎       | 296/1261 [01:54<06:47,  2.37it/s]








 24%|██▎       | 297/1261 [01:54<06:36,  2.43it/s]








 24%|██▎       | 298/1261 [01:55<06:44,  2.38it/s]








 24%|██▎       | 299/1261 [01:55<06:34,  2.44it/s]








 24%|██▍       | 300/1261 [01:56<06:33,  2.44it/s]








 24%|██▍       | 301/1261 [01:56<07:12,  2.22it/s]








 24%|██▍       | 302/1261 [01:57<07:45,  2.06it/s]








 24%|██▍       | 303/1261 [01:57<07:25,  2.15it/s]








 24%|██▍       | 304/1261 [01:58<07:20,  2.17it/s]








 24%|██▍       | 305/1261 [01:58<07:00,  2.27it/s]








 24%|██▍       | 306/1261 [01:59<06:57,  2.29it/s]








 24%|██▍       | 307/1261 [01:59<06:51,  2.32it/s]








 24%|██▍       | 308/1261 [01:59<06:55,  2.29it/s]








 25%|██▍       | 309/1261 [02:00<06:38,  2.39it/s]








 25%|██▍       | 310/1261 [02:00<06:39,  2.38it/s]








 25%|██▍       | 311/1261 [02:01<06:54,  2.29it/s]








 25%|██▍       | 312/1261 [02:01<06:43,  2.35it/s]








 25%|██▍       | 313/1261 [02:01<06:39,  2.37it/s]








 25%|██▍       | 314/1261 [02:02<06:39,  2.37it/s]








 25%|██▍       | 315/1261 [02:02<06:47,  2.32it/s]








 25%|██▌       | 316/1261 [02:03<06:42,  2.35it/s]








 25%|██▌       | 317/1261 [02:03<06:46,  2.32it/s]








 25%|██▌       | 318/1261 [02:04<06:53,  2.28it/s]








 25%|██▌       | 319/1261 [02:04<06:42,  2.34it/s]








 25%|██▌       | 320/1261 [02:04<06:43,  2.33it/s]








 25%|██▌       | 321/1261 [02:05<06:37,  2.36it/s]








 26%|██▌       | 322/1261 [02:05<07:05,  2.21it/s]








 26%|██▌       | 323/1261 [02:06<07:44,  2.02it/s]








 26%|██▌       | 324/1261 [02:07<07:54,  1.97it/s]








 26%|██▌       | 325/1261 [02:07<08:12,  1.90it/s]








 26%|██▌       | 326/1261 [02:08<07:56,  1.96it/s]








 26%|██▌       | 327/1261 [02:08<07:44,  2.01it/s]








 26%|██▌       | 328/1261 [02:08<07:24,  2.10it/s]








 26%|██▌       | 329/1261 [02:09<07:29,  2.07it/s]








 26%|██▌       | 330/1261 [02:09<07:42,  2.01it/s]








 26%|██▌       | 331/1261 [02:10<07:55,  1.96it/s]








 26%|██▋       | 332/1261 [02:11<08:21,  1.85it/s]








 26%|██▋       | 333/1261 [02:11<07:47,  1.98it/s]








 26%|██▋       | 334/1261 [02:12<07:39,  2.02it/s]








 27%|██▋       | 335/1261 [02:12<07:28,  2.06it/s]








 27%|██▋       | 336/1261 [02:12<07:05,  2.17it/s]








 27%|██▋       | 337/1261 [02:13<06:45,  2.28it/s]








 27%|██▋       | 338/1261 [02:13<07:08,  2.15it/s]








 27%|██▋       | 339/1261 [02:14<07:08,  2.15it/s]








 27%|██▋       | 340/1261 [02:14<07:00,  2.19it/s]








 27%|██▋       | 341/1261 [02:15<06:49,  2.25it/s]








 27%|██▋       | 342/1261 [02:15<07:02,  2.17it/s]








 27%|██▋       | 343/1261 [02:16<06:52,  2.23it/s]








 27%|██▋       | 344/1261 [02:16<06:33,  2.33it/s]








 27%|██▋       | 345/1261 [02:16<06:38,  2.30it/s]








 27%|██▋       | 346/1261 [02:17<06:23,  2.38it/s]








 28%|██▊       | 347/1261 [02:17<06:33,  2.32it/s]








 28%|██▊       | 348/1261 [02:18<06:29,  2.34it/s]








 28%|██▊       | 349/1261 [02:18<06:40,  2.28it/s]








 28%|██▊       | 350/1261 [02:19<06:57,  2.18it/s]








 28%|██▊       | 351/1261 [02:19<06:51,  2.21it/s]








 28%|██▊       | 352/1261 [02:19<06:45,  2.24it/s]








 28%|██▊       | 353/1261 [02:20<06:37,  2.28it/s]








 28%|██▊       | 354/1261 [02:20<06:30,  2.32it/s]








 28%|██▊       | 355/1261 [02:21<06:31,  2.32it/s]








 28%|██▊       | 356/1261 [02:21<06:23,  2.36it/s]








 28%|██▊       | 357/1261 [02:22<06:26,  2.34it/s]








 28%|██▊       | 358/1261 [02:22<06:34,  2.29it/s]








 28%|██▊       | 359/1261 [02:22<06:28,  2.32it/s]








 29%|██▊       | 360/1261 [02:23<06:32,  2.30it/s]








 29%|██▊       | 361/1261 [02:23<06:19,  2.37it/s]








 29%|██▊       | 362/1261 [02:24<06:24,  2.34it/s]








 29%|██▉       | 363/1261 [02:24<06:15,  2.39it/s]








 29%|██▉       | 364/1261 [02:25<06:32,  2.28it/s]








 29%|██▉       | 365/1261 [02:25<06:19,  2.36it/s]








 29%|██▉       | 366/1261 [02:25<06:32,  2.28it/s]








 29%|██▉       | 367/1261 [02:26<06:21,  2.34it/s]








 29%|██▉       | 368/1261 [02:26<06:08,  2.42it/s]








 29%|██▉       | 369/1261 [02:27<06:04,  2.44it/s]








 29%|██▉       | 370/1261 [02:27<06:20,  2.34it/s]








 29%|██▉       | 371/1261 [02:28<06:13,  2.39it/s]








 30%|██▉       | 372/1261 [02:28<06:08,  2.41it/s]








 30%|██▉       | 373/1261 [02:28<06:02,  2.45it/s]








 30%|██▉       | 374/1261 [02:29<06:24,  2.31it/s]








 30%|██▉       | 375/1261 [02:29<06:15,  2.36it/s]








 30%|██▉       | 376/1261 [02:30<06:11,  2.38it/s]








 30%|██▉       | 377/1261 [02:30<06:14,  2.36it/s]








 30%|██▉       | 378/1261 [02:31<06:15,  2.35it/s]








 30%|███       | 379/1261 [02:31<05:57,  2.47it/s]








 30%|███       | 380/1261 [02:31<06:08,  2.39it/s]








 30%|███       | 381/1261 [02:32<06:20,  2.31it/s]








 30%|███       | 382/1261 [02:32<06:11,  2.37it/s]








 30%|███       | 383/1261 [02:33<06:05,  2.40it/s]








 30%|███       | 384/1261 [02:33<05:50,  2.51it/s]








 31%|███       | 385/1261 [02:33<05:43,  2.55it/s]








 31%|███       | 386/1261 [02:34<05:59,  2.43it/s]








 31%|███       | 387/1261 [02:34<05:57,  2.44it/s]








 31%|███       | 388/1261 [02:35<05:55,  2.45it/s]








 31%|███       | 389/1261 [02:35<05:54,  2.46it/s]








 31%|███       | 390/1261 [02:35<05:53,  2.46it/s]








 31%|███       | 391/1261 [02:36<05:55,  2.44it/s]








 31%|███       | 392/1261 [02:36<06:09,  2.35it/s]








 31%|███       | 393/1261 [02:37<06:05,  2.38it/s]








 31%|███       | 394/1261 [02:37<06:05,  2.38it/s]








 31%|███▏      | 395/1261 [02:38<06:05,  2.37it/s]








 31%|███▏      | 396/1261 [02:38<06:06,  2.36it/s]








 31%|███▏      | 397/1261 [02:38<06:12,  2.32it/s]








 32%|███▏      | 398/1261 [02:39<06:23,  2.25it/s]








 32%|███▏      | 399/1261 [02:39<06:06,  2.35it/s]








 32%|███▏      | 400/1261 [02:40<06:02,  2.38it/s]








 32%|███▏      | 401/1261 [02:40<05:59,  2.39it/s]








 32%|███▏      | 402/1261 [02:41<06:07,  2.34it/s]








 32%|███▏      | 403/1261 [02:41<06:03,  2.36it/s]








 32%|███▏      | 404/1261 [02:41<06:00,  2.38it/s]








 32%|███▏      | 405/1261 [02:42<06:12,  2.30it/s]








 32%|███▏      | 406/1261 [02:42<06:33,  2.17it/s]








 32%|███▏      | 407/1261 [02:43<06:31,  2.18it/s]








 32%|███▏      | 408/1261 [02:43<06:19,  2.25it/s]








 32%|███▏      | 409/1261 [02:44<06:33,  2.17it/s]








 33%|███▎      | 410/1261 [02:44<06:46,  2.09it/s]








 33%|███▎      | 411/1261 [02:45<06:20,  2.23it/s]








 33%|███▎      | 412/1261 [02:45<06:15,  2.26it/s]








 33%|███▎      | 413/1261 [02:45<06:01,  2.35it/s]








 33%|███▎      | 414/1261 [02:46<05:59,  2.36it/s]








 33%|███▎      | 415/1261 [02:46<05:46,  2.44it/s]








 33%|███▎      | 416/1261 [02:47<05:45,  2.45it/s]








 33%|███▎      | 417/1261 [02:47<05:48,  2.42it/s]








 33%|███▎      | 418/1261 [02:47<05:55,  2.37it/s]








 33%|███▎      | 419/1261 [02:48<05:54,  2.38it/s]








 33%|███▎      | 420/1261 [02:48<06:02,  2.32it/s]








 33%|███▎      | 421/1261 [02:49<06:02,  2.32it/s]








 33%|███▎      | 422/1261 [02:49<06:06,  2.29it/s]








 34%|███▎      | 423/1261 [02:50<06:00,  2.33it/s]








 34%|███▎      | 424/1261 [02:50<05:57,  2.34it/s]








 34%|███▎      | 425/1261 [02:51<06:12,  2.24it/s]








 34%|███▍      | 426/1261 [02:51<06:02,  2.30it/s]








 34%|███▍      | 427/1261 [02:51<06:04,  2.29it/s]








 34%|███▍      | 428/1261 [02:52<05:59,  2.32it/s]








 34%|███▍      | 429/1261 [02:52<05:58,  2.32it/s]








 34%|███▍      | 430/1261 [02:53<05:54,  2.35it/s]








 34%|███▍      | 431/1261 [02:53<05:53,  2.35it/s]








 34%|███▍      | 432/1261 [02:54<05:53,  2.34it/s]








 34%|███▍      | 433/1261 [02:54<05:46,  2.39it/s]








 34%|███▍      | 434/1261 [02:54<06:10,  2.23it/s]








 34%|███▍      | 435/1261 [02:55<06:11,  2.22it/s]








 35%|███▍      | 436/1261 [02:55<06:08,  2.24it/s]








 35%|███▍      | 437/1261 [02:56<05:56,  2.31it/s]








 35%|███▍      | 438/1261 [02:56<06:02,  2.27it/s]








 35%|███▍      | 439/1261 [02:57<05:40,  2.42it/s]








 35%|███▍      | 440/1261 [02:57<05:20,  2.56it/s]








 35%|███▍      | 441/1261 [02:57<05:16,  2.59it/s]








 35%|███▌      | 442/1261 [02:58<05:06,  2.67it/s]








 35%|███▌      | 443/1261 [02:58<04:54,  2.78it/s]








 35%|███▌      | 444/1261 [02:58<04:57,  2.75it/s]








 35%|███▌      | 445/1261 [02:59<04:53,  2.78it/s]








 35%|███▌      | 446/1261 [02:59<04:57,  2.74it/s]








 35%|███▌      | 447/1261 [03:00<05:28,  2.48it/s]








 36%|███▌      | 448/1261 [03:00<05:30,  2.46it/s]








 36%|███▌      | 449/1261 [03:00<05:39,  2.39it/s]








 36%|███▌      | 450/1261 [03:01<05:53,  2.29it/s]








 36%|███▌      | 451/1261 [03:01<06:03,  2.23it/s]








 36%|███▌      | 452/1261 [03:02<06:07,  2.20it/s]








 36%|███▌      | 453/1261 [03:02<05:57,  2.26it/s]








 36%|███▌      | 454/1261 [03:03<05:50,  2.30it/s]








 36%|███▌      | 455/1261 [03:03<05:45,  2.34it/s]








 36%|███▌      | 456/1261 [03:03<05:36,  2.39it/s]








 36%|███▌      | 457/1261 [03:04<05:38,  2.37it/s]








 36%|███▋      | 458/1261 [03:04<05:36,  2.39it/s]








 36%|███▋      | 459/1261 [03:05<05:25,  2.46it/s]








 36%|███▋      | 460/1261 [03:05<05:39,  2.36it/s]








 37%|███▋      | 461/1261 [03:06<05:44,  2.32it/s]








 37%|███▋      | 462/1261 [03:06<05:51,  2.27it/s]








 37%|███▋      | 463/1261 [03:07<05:57,  2.23it/s]








 37%|███▋      | 464/1261 [03:07<05:38,  2.36it/s]








 37%|███▋      | 465/1261 [03:07<05:41,  2.33it/s]








 37%|███▋      | 466/1261 [03:08<05:39,  2.34it/s]








 37%|███▋      | 467/1261 [03:08<05:45,  2.30it/s]








 37%|███▋      | 468/1261 [03:09<05:35,  2.36it/s]








 37%|███▋      | 469/1261 [03:09<05:31,  2.39it/s]








 37%|███▋      | 470/1261 [03:09<05:28,  2.41it/s]








 37%|███▋      | 471/1261 [03:10<05:18,  2.48it/s]








 37%|███▋      | 472/1261 [03:10<05:11,  2.53it/s]








 38%|███▊      | 473/1261 [03:11<05:11,  2.53it/s]








 38%|███▊      | 474/1261 [03:11<05:14,  2.50it/s]








 38%|███▊      | 475/1261 [03:11<05:25,  2.41it/s]








 38%|███▊      | 476/1261 [03:12<05:30,  2.38it/s]








 38%|███▊      | 477/1261 [03:12<05:31,  2.36it/s]








 38%|███▊      | 478/1261 [03:13<05:34,  2.34it/s]








 38%|███▊      | 479/1261 [03:13<05:30,  2.37it/s]








 38%|███▊      | 480/1261 [03:14<05:46,  2.25it/s]








 38%|███▊      | 481/1261 [03:14<05:44,  2.26it/s]








 38%|███▊      | 482/1261 [03:14<05:37,  2.31it/s]








 38%|███▊      | 483/1261 [03:15<05:28,  2.37it/s]








 38%|███▊      | 484/1261 [03:15<05:32,  2.34it/s]








 38%|███▊      | 485/1261 [03:16<05:40,  2.28it/s]








 39%|███▊      | 486/1261 [03:16<05:46,  2.23it/s]








 39%|███▊      | 487/1261 [03:17<06:05,  2.12it/s]








 39%|███▊      | 488/1261 [03:17<06:01,  2.14it/s]








 39%|███▉      | 489/1261 [03:18<05:49,  2.21it/s]








 39%|███▉      | 490/1261 [03:18<05:38,  2.28it/s]








 39%|███▉      | 491/1261 [03:18<05:29,  2.34it/s]








 39%|███▉      | 492/1261 [03:19<05:22,  2.38it/s]








 39%|███▉      | 493/1261 [03:19<05:19,  2.41it/s]








 39%|███▉      | 494/1261 [03:20<05:45,  2.22it/s]








 39%|███▉      | 495/1261 [03:20<05:45,  2.22it/s]








 39%|███▉      | 496/1261 [03:21<05:32,  2.30it/s]








 39%|███▉      | 497/1261 [03:21<05:45,  2.21it/s]








 39%|███▉      | 498/1261 [03:22<05:41,  2.24it/s]








 40%|███▉      | 499/1261 [03:22<05:28,  2.32it/s]








 40%|███▉      | 500/1261 [03:22<05:41,  2.23it/s]








 40%|███▉      | 501/1261 [03:23<05:43,  2.21it/s]








 40%|███▉      | 502/1261 [03:23<05:33,  2.28it/s]








 40%|███▉      | 503/1261 [03:24<05:27,  2.31it/s]








 40%|███▉      | 504/1261 [03:24<05:26,  2.32it/s]








 40%|████      | 505/1261 [03:25<05:20,  2.36it/s]








 40%|████      | 506/1261 [03:25<05:28,  2.30it/s]








 40%|████      | 507/1261 [03:25<05:19,  2.36it/s]








 40%|████      | 508/1261 [03:26<05:22,  2.34it/s]








 40%|████      | 509/1261 [03:26<05:26,  2.31it/s]








 40%|████      | 510/1261 [03:27<05:19,  2.35it/s]








 41%|████      | 511/1261 [03:27<05:10,  2.42it/s]








 41%|████      | 512/1261 [03:28<05:17,  2.36it/s]








 41%|████      | 513/1261 [03:28<05:18,  2.35it/s]








 41%|████      | 514/1261 [03:28<05:27,  2.28it/s]








 41%|████      | 515/1261 [03:29<05:16,  2.36it/s]








 41%|████      | 516/1261 [03:29<05:14,  2.37it/s]








 41%|████      | 517/1261 [03:30<05:04,  2.44it/s]








 41%|████      | 518/1261 [03:30<05:04,  2.44it/s]








 41%|████      | 519/1261 [03:30<05:04,  2.43it/s]








 41%|████      | 520/1261 [03:31<05:11,  2.38it/s]








 41%|████▏     | 521/1261 [03:31<05:12,  2.37it/s]








 41%|████▏     | 522/1261 [03:32<05:12,  2.37it/s]








 41%|████▏     | 523/1261 [03:32<05:29,  2.24it/s]








 42%|████▏     | 524/1261 [03:33<05:24,  2.27it/s]








 42%|████▏     | 525/1261 [03:33<05:21,  2.29it/s]








 42%|████▏     | 526/1261 [03:34<05:25,  2.26it/s]








 42%|████▏     | 527/1261 [03:34<05:14,  2.34it/s]








 42%|████▏     | 528/1261 [03:34<05:05,  2.40it/s]








 42%|████▏     | 529/1261 [03:35<05:04,  2.40it/s]








 42%|████▏     | 530/1261 [03:35<05:03,  2.41it/s]








 42%|████▏     | 531/1261 [03:36<05:09,  2.36it/s]








 42%|████▏     | 532/1261 [03:36<05:03,  2.40it/s]








 42%|████▏     | 533/1261 [03:36<05:09,  2.35it/s]








 42%|████▏     | 534/1261 [03:37<05:06,  2.37it/s]








 42%|████▏     | 535/1261 [03:37<05:03,  2.39it/s]








 43%|████▎     | 536/1261 [03:38<05:07,  2.35it/s]








 43%|████▎     | 537/1261 [03:38<05:06,  2.36it/s]








 43%|████▎     | 538/1261 [03:39<05:17,  2.27it/s]








 43%|████▎     | 539/1261 [03:39<05:11,  2.32it/s]








 43%|████▎     | 540/1261 [03:39<05:08,  2.33it/s]








 43%|████▎     | 541/1261 [03:40<05:13,  2.30it/s]








 43%|████▎     | 542/1261 [03:40<05:15,  2.28it/s]








 43%|████▎     | 543/1261 [03:41<05:15,  2.27it/s]








 43%|████▎     | 544/1261 [03:41<05:15,  2.27it/s]








 43%|████▎     | 545/1261 [03:42<05:18,  2.25it/s]








 43%|████▎     | 546/1261 [03:42<05:21,  2.22it/s]








 43%|████▎     | 547/1261 [03:43<05:21,  2.22it/s]








 43%|████▎     | 548/1261 [03:43<05:41,  2.09it/s]








 44%|████▎     | 549/1261 [03:44<05:39,  2.10it/s]








 44%|████▎     | 550/1261 [03:44<05:30,  2.15it/s]








 44%|████▎     | 551/1261 [03:45<05:32,  2.14it/s]








 44%|████▍     | 552/1261 [03:45<05:25,  2.17it/s]








 44%|████▍     | 553/1261 [03:45<05:12,  2.27it/s]








 44%|████▍     | 554/1261 [03:46<05:05,  2.31it/s]








 44%|████▍     | 555/1261 [03:46<05:12,  2.26it/s]








 44%|████▍     | 556/1261 [03:47<05:09,  2.28it/s]








 44%|████▍     | 557/1261 [03:47<05:01,  2.33it/s]








 44%|████▍     | 558/1261 [03:48<05:05,  2.30it/s]








 44%|████▍     | 559/1261 [03:48<05:04,  2.31it/s]








 44%|████▍     | 560/1261 [03:48<05:15,  2.22it/s]








 44%|████▍     | 561/1261 [03:49<05:23,  2.16it/s]








 45%|████▍     | 562/1261 [03:49<05:29,  2.12it/s]








 45%|████▍     | 563/1261 [03:50<05:25,  2.14it/s]








 45%|████▍     | 564/1261 [03:50<05:24,  2.15it/s]








 45%|████▍     | 565/1261 [03:51<05:26,  2.13it/s]








 45%|████▍     | 566/1261 [03:51<05:16,  2.20it/s]








 45%|████▍     | 567/1261 [03:52<05:16,  2.19it/s]








 45%|████▌     | 568/1261 [03:52<05:20,  2.16it/s]








 45%|████▌     | 569/1261 [03:53<05:09,  2.23it/s]








 45%|████▌     | 570/1261 [03:53<05:07,  2.25it/s]








 45%|████▌     | 571/1261 [03:53<05:00,  2.30it/s]








 45%|████▌     | 572/1261 [03:54<05:07,  2.24it/s]








 45%|████▌     | 573/1261 [03:54<05:01,  2.28it/s]








 46%|████▌     | 574/1261 [03:55<04:58,  2.30it/s]








 46%|████▌     | 575/1261 [03:55<04:57,  2.30it/s]








 46%|████▌     | 576/1261 [03:56<05:14,  2.18it/s]








 46%|████▌     | 577/1261 [03:56<05:08,  2.22it/s]








 46%|████▌     | 578/1261 [03:57<05:01,  2.27it/s]








 46%|████▌     | 579/1261 [03:57<04:54,  2.32it/s]








 46%|████▌     | 580/1261 [03:57<04:46,  2.38it/s]








 46%|████▌     | 581/1261 [03:58<04:38,  2.44it/s]








 46%|████▌     | 582/1261 [03:58<04:40,  2.42it/s]








 46%|████▌     | 583/1261 [03:59<04:38,  2.43it/s]








 46%|████▋     | 584/1261 [03:59<04:47,  2.35it/s]








 46%|████▋     | 585/1261 [04:00<04:50,  2.33it/s]








 46%|████▋     | 586/1261 [04:00<04:54,  2.29it/s]








 47%|████▋     | 587/1261 [04:00<04:56,  2.27it/s]








 47%|████▋     | 588/1261 [04:01<05:05,  2.20it/s]








 47%|████▋     | 589/1261 [04:01<05:08,  2.18it/s]








 47%|████▋     | 590/1261 [04:02<05:05,  2.20it/s]








 47%|████▋     | 591/1261 [04:02<04:58,  2.24it/s]








 47%|████▋     | 592/1261 [04:03<04:55,  2.27it/s]








 47%|████▋     | 593/1261 [04:03<05:05,  2.19it/s]








 47%|████▋     | 594/1261 [04:04<04:59,  2.23it/s]








 47%|████▋     | 595/1261 [04:04<04:46,  2.32it/s]








 47%|████▋     | 596/1261 [04:04<04:49,  2.29it/s]








 47%|████▋     | 597/1261 [04:05<04:44,  2.33it/s]








 47%|████▋     | 598/1261 [04:05<04:40,  2.36it/s]








 48%|████▊     | 599/1261 [04:06<04:44,  2.33it/s]








 48%|████▊     | 600/1261 [04:06<04:46,  2.31it/s]








 48%|████▊     | 601/1261 [04:07<04:41,  2.35it/s]








 48%|████▊     | 602/1261 [04:07<04:36,  2.39it/s]








 48%|████▊     | 603/1261 [04:07<04:30,  2.43it/s]








 48%|████▊     | 604/1261 [04:08<04:36,  2.38it/s]








 48%|████▊     | 605/1261 [04:08<04:32,  2.41it/s]








 48%|████▊     | 606/1261 [04:09<04:32,  2.40it/s]








 48%|████▊     | 607/1261 [04:09<04:41,  2.32it/s]








 48%|████▊     | 608/1261 [04:10<04:45,  2.28it/s]








 48%|████▊     | 609/1261 [04:10<04:44,  2.29it/s]








 48%|████▊     | 610/1261 [04:10<04:38,  2.34it/s]








 48%|████▊     | 611/1261 [04:11<04:44,  2.29it/s]








 49%|████▊     | 612/1261 [04:11<04:42,  2.30it/s]








 49%|████▊     | 613/1261 [04:12<04:39,  2.32it/s]








 49%|████▊     | 614/1261 [04:12<04:38,  2.33it/s]








 49%|████▉     | 615/1261 [04:12<04:24,  2.44it/s]








 49%|████▉     | 616/1261 [04:13<04:38,  2.32it/s]








 49%|████▉     | 617/1261 [04:13<04:32,  2.37it/s]








 49%|████▉     | 618/1261 [04:14<04:25,  2.42it/s]








 49%|████▉     | 619/1261 [04:14<04:19,  2.47it/s]








 49%|████▉     | 620/1261 [04:15<04:20,  2.46it/s]








 49%|████▉     | 621/1261 [04:15<04:27,  2.39it/s]








 49%|████▉     | 622/1261 [04:15<04:25,  2.41it/s]








 49%|████▉     | 623/1261 [04:16<04:17,  2.48it/s]








 49%|████▉     | 624/1261 [04:16<04:25,  2.40it/s]








 50%|████▉     | 625/1261 [04:17<04:26,  2.38it/s]








 50%|████▉     | 626/1261 [04:17<04:20,  2.44it/s]








 50%|████▉     | 627/1261 [04:17<04:20,  2.44it/s]








 50%|████▉     | 628/1261 [04:18<04:22,  2.41it/s]








 50%|████▉     | 629/1261 [04:18<04:28,  2.36it/s]








 50%|████▉     | 630/1261 [04:19<04:28,  2.35it/s]








 50%|█████     | 631/1261 [04:19<04:31,  2.32it/s]








 50%|█████     | 632/1261 [04:20<04:37,  2.27it/s]








 50%|█████     | 633/1261 [04:20<04:33,  2.30it/s]








 50%|█████     | 634/1261 [04:21<04:44,  2.20it/s]








 50%|█████     | 635/1261 [04:21<04:41,  2.23it/s]








 50%|█████     | 636/1261 [04:22<04:54,  2.12it/s]








 51%|█████     | 637/1261 [04:22<04:47,  2.17it/s]








 51%|█████     | 638/1261 [04:22<04:41,  2.22it/s]








 51%|█████     | 639/1261 [04:23<04:39,  2.22it/s]








 51%|█████     | 640/1261 [04:23<04:35,  2.26it/s]








 51%|█████     | 641/1261 [04:24<04:31,  2.28it/s]








 51%|█████     | 642/1261 [04:24<04:30,  2.29it/s]








 51%|█████     | 643/1261 [04:25<04:34,  2.25it/s]








 51%|█████     | 644/1261 [04:25<04:36,  2.23it/s]








 51%|█████     | 645/1261 [04:26<04:36,  2.23it/s]








 51%|█████     | 646/1261 [04:26<04:39,  2.20it/s]








 51%|█████▏    | 647/1261 [04:26<04:41,  2.18it/s]








 51%|█████▏    | 648/1261 [04:27<04:41,  2.18it/s]








 51%|█████▏    | 649/1261 [04:27<04:47,  2.13it/s]








 52%|█████▏    | 650/1261 [04:28<04:40,  2.18it/s]








 52%|█████▏    | 651/1261 [04:28<04:32,  2.24it/s]








 52%|█████▏    | 652/1261 [04:29<04:43,  2.15it/s]








 52%|█████▏    | 653/1261 [04:29<04:41,  2.16it/s]








 52%|█████▏    | 654/1261 [04:30<04:41,  2.16it/s]








 52%|█████▏    | 655/1261 [04:30<04:36,  2.19it/s]








 52%|█████▏    | 656/1261 [04:31<04:38,  2.17it/s]








 52%|█████▏    | 657/1261 [04:31<04:33,  2.21it/s]








 52%|█████▏    | 658/1261 [04:31<04:30,  2.23it/s]








 52%|█████▏    | 659/1261 [04:32<04:19,  2.32it/s]








 52%|█████▏    | 660/1261 [04:32<03:59,  2.51it/s]








 52%|█████▏    | 661/1261 [04:32<03:44,  2.67it/s]








 52%|█████▏    | 662/1261 [04:33<03:50,  2.60it/s]








 53%|█████▎    | 663/1261 [04:33<04:00,  2.48it/s]








 53%|█████▎    | 664/1261 [04:34<03:51,  2.58it/s]








 53%|█████▎    | 665/1261 [04:34<03:51,  2.57it/s]








 53%|█████▎    | 666/1261 [04:35<03:57,  2.50it/s]








 53%|█████▎    | 667/1261 [04:35<04:10,  2.37it/s]








 53%|█████▎    | 668/1261 [04:35<03:55,  2.52it/s]








 53%|█████▎    | 669/1261 [04:36<04:14,  2.33it/s]








 53%|█████▎    | 670/1261 [04:36<04:09,  2.37it/s]








 53%|█████▎    | 671/1261 [04:37<04:07,  2.38it/s]








 53%|█████▎    | 672/1261 [04:37<04:04,  2.41it/s]








 53%|█████▎    | 673/1261 [04:37<04:06,  2.39it/s]








 53%|█████▎    | 674/1261 [04:38<04:11,  2.33it/s]








 54%|█████▎    | 675/1261 [04:38<04:12,  2.32it/s]








 54%|█████▎    | 676/1261 [04:39<04:01,  2.42it/s]








 54%|█████▎    | 677/1261 [04:39<04:01,  2.42it/s]








 54%|█████▍    | 678/1261 [04:40<03:54,  2.48it/s]








 54%|█████▍    | 679/1261 [04:40<03:51,  2.51it/s]








 54%|█████▍    | 680/1261 [04:40<03:45,  2.58it/s]








 54%|█████▍    | 681/1261 [04:41<03:46,  2.57it/s]








 54%|█████▍    | 682/1261 [04:41<03:41,  2.62it/s]








 54%|█████▍    | 683/1261 [04:41<03:44,  2.57it/s]








 54%|█████▍    | 684/1261 [04:42<03:41,  2.61it/s]








 54%|█████▍    | 685/1261 [04:42<03:42,  2.59it/s]








 54%|█████▍    | 686/1261 [04:43<03:43,  2.58it/s]








 54%|█████▍    | 687/1261 [04:43<03:43,  2.56it/s]








 55%|█████▍    | 688/1261 [04:43<03:38,  2.62it/s]








 55%|█████▍    | 689/1261 [04:44<03:36,  2.64it/s]








 55%|█████▍    | 690/1261 [04:44<03:29,  2.73it/s]








 55%|█████▍    | 691/1261 [04:44<03:34,  2.65it/s]








 55%|█████▍    | 692/1261 [04:45<03:37,  2.62it/s]








 55%|█████▍    | 693/1261 [04:45<03:47,  2.50it/s]








 55%|█████▌    | 694/1261 [04:46<04:03,  2.33it/s]








 55%|█████▌    | 695/1261 [04:46<04:17,  2.20it/s]








 55%|█████▌    | 696/1261 [04:47<04:23,  2.15it/s]








 55%|█████▌    | 697/1261 [04:47<04:34,  2.06it/s]








 55%|█████▌    | 698/1261 [04:48<04:47,  1.96it/s]








 55%|█████▌    | 699/1261 [04:48<04:54,  1.91it/s]








 56%|█████▌    | 700/1261 [04:49<04:56,  1.89it/s]








 56%|█████▌    | 701/1261 [04:49<04:44,  1.97it/s]








 56%|█████▌    | 702/1261 [04:50<04:36,  2.02it/s]








 56%|█████▌    | 703/1261 [04:50<04:47,  1.94it/s]








 56%|█████▌    | 704/1261 [04:51<04:34,  2.03it/s]








 56%|█████▌    | 705/1261 [04:51<04:34,  2.02it/s]








 56%|█████▌    | 706/1261 [04:52<04:42,  1.96it/s]








 56%|█████▌    | 707/1261 [04:52<04:34,  2.02it/s]








 56%|█████▌    | 708/1261 [04:53<04:39,  1.98it/s]








 56%|█████▌    | 709/1261 [04:53<04:38,  1.98it/s]








 56%|█████▋    | 710/1261 [04:54<04:50,  1.90it/s]








 56%|█████▋    | 711/1261 [04:55<04:57,  1.85it/s]








 56%|█████▋    | 712/1261 [04:55<05:03,  1.81it/s]








 57%|█████▋    | 713/1261 [04:56<04:57,  1.84it/s]








 57%|█████▋    | 714/1261 [04:56<05:05,  1.79it/s]








 57%|█████▋    | 715/1261 [04:57<05:13,  1.74it/s]








 57%|█████▋    | 716/1261 [04:58<05:19,  1.71it/s]








 57%|█████▋    | 717/1261 [04:58<05:12,  1.74it/s]








 57%|█████▋    | 718/1261 [04:59<05:05,  1.78it/s]








 57%|█████▋    | 719/1261 [04:59<05:09,  1.75it/s]








 57%|█████▋    | 720/1261 [05:00<05:17,  1.71it/s]








 57%|█████▋    | 721/1261 [05:00<04:58,  1.81it/s]








 57%|█████▋    | 722/1261 [05:01<04:38,  1.93it/s]








 57%|█████▋    | 723/1261 [05:01<04:37,  1.94it/s]








 57%|█████▋    | 724/1261 [05:02<04:18,  2.08it/s]








 57%|█████▋    | 725/1261 [05:02<04:09,  2.15it/s]








 58%|█████▊    | 726/1261 [05:03<04:11,  2.12it/s]








 58%|█████▊    | 727/1261 [05:03<04:12,  2.12it/s]








 58%|█████▊    | 728/1261 [05:03<04:01,  2.21it/s]








 58%|█████▊    | 729/1261 [05:04<04:07,  2.15it/s]








 58%|█████▊    | 730/1261 [05:04<04:03,  2.18it/s]








 58%|█████▊    | 731/1261 [05:05<04:04,  2.16it/s]








 58%|█████▊    | 732/1261 [05:05<03:54,  2.25it/s]








 58%|█████▊    | 733/1261 [05:06<03:55,  2.24it/s]








 58%|█████▊    | 734/1261 [05:06<03:50,  2.29it/s]








 58%|█████▊    | 735/1261 [05:07<03:52,  2.26it/s]








 58%|█████▊    | 736/1261 [05:07<04:00,  2.18it/s]








 58%|█████▊    | 737/1261 [05:08<04:01,  2.17it/s]








 59%|█████▊    | 738/1261 [05:08<03:56,  2.21it/s]








 59%|█████▊    | 739/1261 [05:08<04:00,  2.17it/s]








 59%|█████▊    | 740/1261 [05:09<04:02,  2.15it/s]








 59%|█████▉    | 741/1261 [05:09<03:58,  2.18it/s]








 59%|█████▉    | 742/1261 [05:10<03:48,  2.27it/s]








 59%|█████▉    | 743/1261 [05:10<03:51,  2.24it/s]








 59%|█████▉    | 744/1261 [05:11<03:46,  2.28it/s]








 59%|█████▉    | 745/1261 [05:11<03:45,  2.28it/s]








 59%|█████▉    | 746/1261 [05:12<03:44,  2.29it/s]








 59%|█████▉    | 747/1261 [05:12<03:46,  2.27it/s]








 59%|█████▉    | 748/1261 [05:12<03:47,  2.26it/s]








 59%|█████▉    | 749/1261 [05:13<03:44,  2.28it/s]








 59%|█████▉    | 750/1261 [05:13<03:44,  2.28it/s]








 60%|█████▉    | 751/1261 [05:14<03:44,  2.27it/s]








 60%|█████▉    | 752/1261 [05:14<03:49,  2.22it/s]








 60%|█████▉    | 753/1261 [05:15<03:41,  2.30it/s]








 60%|█████▉    | 754/1261 [05:15<03:44,  2.25it/s]








 60%|█████▉    | 755/1261 [05:16<03:51,  2.19it/s]








 60%|█████▉    | 756/1261 [05:16<03:46,  2.23it/s]








 60%|██████    | 757/1261 [05:16<03:49,  2.19it/s]








 60%|██████    | 758/1261 [05:17<03:51,  2.17it/s]








 60%|██████    | 759/1261 [05:17<03:54,  2.14it/s]








 60%|██████    | 760/1261 [05:18<03:47,  2.20it/s]








 60%|██████    | 761/1261 [05:18<03:59,  2.09it/s]








 60%|██████    | 762/1261 [05:19<04:01,  2.06it/s]








 61%|██████    | 763/1261 [05:19<04:09,  2.00it/s]








 61%|██████    | 764/1261 [05:20<04:14,  1.95it/s]








 61%|██████    | 765/1261 [05:20<04:06,  2.01it/s]








 61%|██████    | 766/1261 [05:21<04:04,  2.02it/s]








 61%|██████    | 767/1261 [05:21<03:57,  2.08it/s]








 61%|██████    | 768/1261 [05:22<03:51,  2.13it/s]








 61%|██████    | 769/1261 [05:22<03:48,  2.15it/s]








 61%|██████    | 770/1261 [05:23<03:44,  2.18it/s]








 61%|██████    | 771/1261 [05:23<03:44,  2.18it/s]








 61%|██████    | 772/1261 [05:24<04:05,  1.99it/s]








 61%|██████▏   | 773/1261 [05:24<04:13,  1.92it/s]








 61%|██████▏   | 774/1261 [05:25<04:24,  1.84it/s]








 61%|██████▏   | 775/1261 [05:25<04:28,  1.81it/s]








 62%|██████▏   | 776/1261 [05:26<04:27,  1.82it/s]








 62%|██████▏   | 777/1261 [05:27<04:18,  1.87it/s]








 62%|██████▏   | 778/1261 [05:27<04:19,  1.86it/s]








 62%|██████▏   | 779/1261 [05:28<04:20,  1.85it/s]








 62%|██████▏   | 780/1261 [05:28<04:06,  1.96it/s]








 62%|██████▏   | 781/1261 [05:29<04:02,  1.98it/s]








 62%|██████▏   | 782/1261 [05:29<03:48,  2.09it/s]








 62%|██████▏   | 783/1261 [05:29<03:40,  2.17it/s]








 62%|██████▏   | 784/1261 [05:30<03:33,  2.23it/s]








 62%|██████▏   | 785/1261 [05:30<03:30,  2.27it/s]








 62%|██████▏   | 786/1261 [05:31<03:26,  2.30it/s]








 62%|██████▏   | 787/1261 [05:31<03:28,  2.27it/s]








 62%|██████▏   | 788/1261 [05:32<03:26,  2.29it/s]








 63%|██████▎   | 789/1261 [05:32<03:25,  2.30it/s]








 63%|██████▎   | 790/1261 [05:32<03:27,  2.28it/s]








 63%|██████▎   | 791/1261 [05:33<03:27,  2.27it/s]








 63%|██████▎   | 792/1261 [05:33<03:23,  2.31it/s]








 63%|██████▎   | 793/1261 [05:34<03:31,  2.22it/s]








 63%|██████▎   | 794/1261 [05:34<03:32,  2.20it/s]








 63%|██████▎   | 795/1261 [05:35<03:29,  2.23it/s]








 63%|██████▎   | 796/1261 [05:35<03:23,  2.28it/s]








 63%|██████▎   | 797/1261 [05:36<03:20,  2.31it/s]








 63%|██████▎   | 798/1261 [05:36<03:24,  2.27it/s]








 63%|██████▎   | 799/1261 [05:36<03:20,  2.30it/s]








 63%|██████▎   | 800/1261 [05:37<03:15,  2.36it/s]








 64%|██████▎   | 801/1261 [05:37<03:11,  2.40it/s]








 64%|██████▎   | 802/1261 [05:38<03:18,  2.31it/s]








 64%|██████▎   | 803/1261 [05:38<03:15,  2.34it/s]








 64%|██████▍   | 804/1261 [05:39<03:19,  2.29it/s]








 64%|██████▍   | 805/1261 [05:39<03:24,  2.23it/s]








 64%|██████▍   | 806/1261 [05:39<03:16,  2.31it/s]








 64%|██████▍   | 807/1261 [05:40<03:19,  2.28it/s]








 64%|██████▍   | 808/1261 [05:40<03:14,  2.33it/s]








 64%|██████▍   | 809/1261 [05:41<03:12,  2.35it/s]








 64%|██████▍   | 810/1261 [05:41<03:20,  2.25it/s]








 64%|██████▍   | 811/1261 [05:42<03:16,  2.29it/s]








 64%|██████▍   | 812/1261 [05:42<03:15,  2.29it/s]








 64%|██████▍   | 813/1261 [05:42<03:15,  2.29it/s]








 65%|██████▍   | 814/1261 [05:43<03:21,  2.22it/s]








 65%|██████▍   | 815/1261 [05:43<03:18,  2.25it/s]








 65%|██████▍   | 816/1261 [05:44<03:18,  2.25it/s]








 65%|██████▍   | 817/1261 [05:44<03:14,  2.28it/s]








 65%|██████▍   | 818/1261 [05:45<03:12,  2.31it/s]








 65%|██████▍   | 819/1261 [05:45<03:10,  2.32it/s]








 65%|██████▌   | 820/1261 [05:46<03:09,  2.32it/s]








 65%|██████▌   | 821/1261 [05:46<03:09,  2.33it/s]








 65%|██████▌   | 822/1261 [05:46<03:07,  2.34it/s]








 65%|██████▌   | 823/1261 [05:47<03:12,  2.27it/s]








 65%|██████▌   | 824/1261 [05:47<03:11,  2.28it/s]








 65%|██████▌   | 825/1261 [05:48<03:10,  2.29it/s]








 66%|██████▌   | 826/1261 [05:48<03:09,  2.30it/s]








 66%|██████▌   | 827/1261 [05:49<03:09,  2.29it/s]








 66%|██████▌   | 828/1261 [05:49<03:05,  2.34it/s]








 66%|██████▌   | 829/1261 [05:49<03:04,  2.35it/s]








 66%|██████▌   | 830/1261 [05:50<03:07,  2.30it/s]








 66%|██████▌   | 831/1261 [05:50<03:11,  2.24it/s]








 66%|██████▌   | 832/1261 [05:51<03:10,  2.25it/s]








 66%|██████▌   | 833/1261 [05:51<03:10,  2.25it/s]








 66%|██████▌   | 834/1261 [05:52<03:12,  2.22it/s]








 66%|██████▌   | 835/1261 [05:52<03:09,  2.25it/s]








 66%|██████▋   | 836/1261 [05:53<03:05,  2.29it/s]








 66%|██████▋   | 837/1261 [05:53<03:00,  2.35it/s]








 66%|██████▋   | 838/1261 [05:53<03:08,  2.25it/s]








 67%|██████▋   | 839/1261 [05:54<03:03,  2.30it/s]








 67%|██████▋   | 840/1261 [05:54<03:06,  2.25it/s]








 67%|██████▋   | 841/1261 [05:55<03:05,  2.26it/s]








 67%|██████▋   | 842/1261 [05:55<03:07,  2.23it/s]








 67%|██████▋   | 843/1261 [05:56<03:07,  2.23it/s]








 67%|██████▋   | 844/1261 [05:56<03:03,  2.27it/s]








 67%|██████▋   | 845/1261 [05:56<02:59,  2.32it/s]








 67%|██████▋   | 846/1261 [05:57<03:02,  2.27it/s]








 67%|██████▋   | 847/1261 [05:57<03:02,  2.27it/s]








 67%|██████▋   | 848/1261 [05:58<02:58,  2.31it/s]








 67%|██████▋   | 849/1261 [05:58<02:53,  2.38it/s]








 67%|██████▋   | 850/1261 [05:59<02:57,  2.31it/s]








 67%|██████▋   | 851/1261 [05:59<03:00,  2.28it/s]








 68%|██████▊   | 852/1261 [06:00<02:57,  2.31it/s]








 68%|██████▊   | 853/1261 [06:00<02:53,  2.36it/s]








 68%|██████▊   | 854/1261 [06:00<03:00,  2.25it/s]








 68%|██████▊   | 855/1261 [06:01<02:59,  2.27it/s]








 68%|██████▊   | 856/1261 [06:01<02:57,  2.29it/s]








 68%|██████▊   | 857/1261 [06:02<02:55,  2.30it/s]








 68%|██████▊   | 858/1261 [06:02<03:03,  2.20it/s]








 68%|██████▊   | 859/1261 [06:03<03:02,  2.21it/s]








 68%|██████▊   | 860/1261 [06:03<02:59,  2.23it/s]








 68%|██████▊   | 861/1261 [06:04<02:54,  2.29it/s]








 68%|██████▊   | 862/1261 [06:04<02:51,  2.33it/s]








 68%|██████▊   | 863/1261 [06:04<02:49,  2.34it/s]








 69%|██████▊   | 864/1261 [06:05<02:48,  2.36it/s]








 69%|██████▊   | 865/1261 [06:05<02:49,  2.34it/s]








 69%|██████▊   | 866/1261 [06:06<02:51,  2.31it/s]








 69%|██████▉   | 867/1261 [06:06<02:53,  2.27it/s]








 69%|██████▉   | 868/1261 [06:07<02:49,  2.31it/s]








 69%|██████▉   | 869/1261 [06:07<02:50,  2.30it/s]








 69%|██████▉   | 870/1261 [06:07<02:52,  2.26it/s]








 69%|██████▉   | 871/1261 [06:08<02:48,  2.31it/s]








 69%|██████▉   | 872/1261 [06:08<02:49,  2.30it/s]








 69%|██████▉   | 873/1261 [06:09<02:51,  2.26it/s]








 69%|██████▉   | 874/1261 [06:09<02:51,  2.26it/s]








 69%|██████▉   | 875/1261 [06:10<02:50,  2.27it/s]








 69%|██████▉   | 876/1261 [06:10<02:48,  2.28it/s]








 70%|██████▉   | 877/1261 [06:10<02:47,  2.29it/s]








 70%|██████▉   | 878/1261 [06:11<02:57,  2.16it/s]








 70%|██████▉   | 879/1261 [06:12<03:05,  2.06it/s]








 70%|██████▉   | 880/1261 [06:12<03:00,  2.11it/s]








 70%|██████▉   | 881/1261 [06:12<02:57,  2.13it/s]








 70%|██████▉   | 882/1261 [06:13<02:53,  2.18it/s]








 70%|███████   | 883/1261 [06:13<02:49,  2.23it/s]








 70%|███████   | 884/1261 [06:14<02:45,  2.27it/s]








 70%|███████   | 885/1261 [06:14<02:42,  2.31it/s]








 70%|███████   | 886/1261 [06:15<02:49,  2.21it/s]








 70%|███████   | 887/1261 [06:15<02:48,  2.22it/s]








 70%|███████   | 888/1261 [06:15<02:44,  2.27it/s]








 70%|███████   | 889/1261 [06:16<02:46,  2.24it/s]








 71%|███████   | 890/1261 [06:16<02:45,  2.24it/s]








 71%|███████   | 891/1261 [06:17<02:47,  2.21it/s]








 71%|███████   | 892/1261 [06:17<02:44,  2.24it/s]








 71%|███████   | 893/1261 [06:18<02:45,  2.23it/s]








 71%|███████   | 894/1261 [06:18<02:44,  2.23it/s]








 71%|███████   | 895/1261 [06:19<02:40,  2.28it/s]








 71%|███████   | 896/1261 [06:19<02:49,  2.15it/s]








 71%|███████   | 897/1261 [06:20<02:43,  2.23it/s]








 71%|███████   | 898/1261 [06:20<02:42,  2.24it/s]








 71%|███████▏  | 899/1261 [06:20<02:40,  2.26it/s]








 71%|███████▏  | 900/1261 [06:21<02:42,  2.23it/s]








 71%|███████▏  | 901/1261 [06:21<02:42,  2.21it/s]








 72%|███████▏  | 902/1261 [06:22<02:40,  2.24it/s]








 72%|███████▏  | 903/1261 [06:22<02:44,  2.18it/s]








 72%|███████▏  | 904/1261 [06:23<02:42,  2.20it/s]








 72%|███████▏  | 905/1261 [06:23<02:40,  2.21it/s]








 72%|███████▏  | 906/1261 [06:24<02:40,  2.22it/s]








 72%|███████▏  | 907/1261 [06:24<02:42,  2.18it/s]








 72%|███████▏  | 908/1261 [06:24<02:37,  2.25it/s]








 72%|███████▏  | 909/1261 [06:25<02:34,  2.28it/s]








 72%|███████▏  | 910/1261 [06:25<02:38,  2.21it/s]








 72%|███████▏  | 911/1261 [06:26<02:35,  2.25it/s]








 72%|███████▏  | 912/1261 [06:26<02:34,  2.25it/s]








 72%|███████▏  | 913/1261 [06:27<02:30,  2.31it/s]








 72%|███████▏  | 914/1261 [06:27<02:35,  2.23it/s]








 73%|███████▎  | 915/1261 [06:28<02:35,  2.23it/s]








 73%|███████▎  | 916/1261 [06:28<02:32,  2.25it/s]








 73%|███████▎  | 917/1261 [06:28<02:31,  2.28it/s]








 73%|███████▎  | 918/1261 [06:29<02:36,  2.19it/s]








 73%|███████▎  | 919/1261 [06:29<02:34,  2.21it/s]








 73%|███████▎  | 920/1261 [06:30<02:32,  2.24it/s]








 73%|███████▎  | 921/1261 [06:30<02:33,  2.21it/s]








 73%|███████▎  | 922/1261 [06:31<02:38,  2.14it/s]








 73%|███████▎  | 923/1261 [06:31<02:49,  2.00it/s]








 73%|███████▎  | 924/1261 [06:32<02:47,  2.01it/s]








 73%|███████▎  | 925/1261 [06:32<02:40,  2.09it/s]








 73%|███████▎  | 926/1261 [06:33<02:40,  2.08it/s]








 74%|███████▎  | 927/1261 [06:33<02:34,  2.16it/s]








 74%|███████▎  | 928/1261 [06:34<02:32,  2.18it/s]








 74%|███████▎  | 929/1261 [06:34<02:30,  2.21it/s]








 74%|███████▍  | 930/1261 [06:35<02:31,  2.18it/s]








 74%|███████▍  | 931/1261 [06:35<02:40,  2.06it/s]








 74%|███████▍  | 932/1261 [06:36<02:36,  2.11it/s]








 74%|███████▍  | 933/1261 [06:36<02:29,  2.20it/s]








 74%|███████▍  | 934/1261 [06:36<02:26,  2.23it/s]








 74%|███████▍  | 935/1261 [06:37<02:25,  2.24it/s]








 74%|███████▍  | 936/1261 [06:37<02:19,  2.33it/s]








 74%|███████▍  | 937/1261 [06:38<02:19,  2.32it/s]








 74%|███████▍  | 938/1261 [06:38<02:21,  2.28it/s]








 74%|███████▍  | 939/1261 [06:39<02:18,  2.32it/s]








 75%|███████▍  | 940/1261 [06:39<02:22,  2.26it/s]








 75%|███████▍  | 941/1261 [06:39<02:19,  2.29it/s]








 75%|███████▍  | 942/1261 [06:40<02:22,  2.23it/s]








 75%|███████▍  | 943/1261 [06:40<02:19,  2.28it/s]








 75%|███████▍  | 944/1261 [06:41<02:19,  2.27it/s]








 75%|███████▍  | 945/1261 [06:41<02:21,  2.23it/s]








 75%|███████▌  | 946/1261 [06:42<02:21,  2.23it/s]








 75%|███████▌  | 947/1261 [06:42<02:21,  2.22it/s]








 75%|███████▌  | 948/1261 [06:43<02:20,  2.22it/s]








 75%|███████▌  | 949/1261 [06:43<02:19,  2.24it/s]








 75%|███████▌  | 950/1261 [06:44<02:21,  2.19it/s]








 75%|███████▌  | 951/1261 [06:44<02:19,  2.23it/s]








 75%|███████▌  | 952/1261 [06:44<02:17,  2.24it/s]








 76%|███████▌  | 953/1261 [06:45<02:16,  2.26it/s]








 76%|███████▌  | 954/1261 [06:45<02:17,  2.23it/s]








 76%|███████▌  | 955/1261 [06:46<02:17,  2.22it/s]








 76%|███████▌  | 956/1261 [06:46<02:15,  2.26it/s]








 76%|███████▌  | 957/1261 [06:47<02:14,  2.26it/s]








 76%|███████▌  | 958/1261 [06:47<02:14,  2.25it/s]








 76%|███████▌  | 959/1261 [06:48<02:17,  2.19it/s]








 76%|███████▌  | 960/1261 [06:48<02:17,  2.19it/s]








 76%|███████▌  | 961/1261 [06:48<02:15,  2.22it/s]








 76%|███████▋  | 962/1261 [06:49<02:14,  2.22it/s]








 76%|███████▋  | 963/1261 [06:49<02:13,  2.23it/s]








 76%|███████▋  | 964/1261 [06:50<02:16,  2.18it/s]








 77%|███████▋  | 965/1261 [06:50<02:16,  2.17it/s]








 77%|███████▋  | 966/1261 [06:51<02:14,  2.19it/s]








 77%|███████▋  | 967/1261 [06:51<02:12,  2.21it/s]








 77%|███████▋  | 968/1261 [06:52<02:10,  2.25it/s]








 77%|███████▋  | 969/1261 [06:52<02:08,  2.27it/s]








 77%|███████▋  | 970/1261 [06:52<02:07,  2.28it/s]








 77%|███████▋  | 971/1261 [06:53<02:07,  2.28it/s]








 77%|███████▋  | 972/1261 [06:53<02:04,  2.32it/s]








 77%|███████▋  | 973/1261 [06:54<02:05,  2.30it/s]








 77%|███████▋  | 974/1261 [06:54<02:06,  2.26it/s]








 77%|███████▋  | 975/1261 [06:55<02:04,  2.29it/s]








 77%|███████▋  | 976/1261 [06:55<02:08,  2.21it/s]








 77%|███████▋  | 977/1261 [06:56<02:05,  2.26it/s]








 78%|███████▊  | 978/1261 [06:56<02:06,  2.24it/s]








 78%|███████▊  | 979/1261 [06:56<02:09,  2.18it/s]








 78%|███████▊  | 980/1261 [06:57<02:06,  2.21it/s]








 78%|███████▊  | 981/1261 [06:57<02:03,  2.27it/s]








 78%|███████▊  | 982/1261 [06:58<02:05,  2.22it/s]








 78%|███████▊  | 983/1261 [06:58<02:08,  2.16it/s]








 78%|███████▊  | 984/1261 [06:59<02:05,  2.21it/s]








 78%|███████▊  | 985/1261 [06:59<02:05,  2.19it/s]








 78%|███████▊  | 986/1261 [07:00<02:06,  2.18it/s]








 78%|███████▊  | 987/1261 [07:00<02:05,  2.19it/s]








 78%|███████▊  | 988/1261 [07:01<02:03,  2.20it/s]








 78%|███████▊  | 989/1261 [07:01<02:00,  2.26it/s]








 79%|███████▊  | 990/1261 [07:01<02:06,  2.15it/s]








 79%|███████▊  | 991/1261 [07:02<02:03,  2.18it/s]








 79%|███████▊  | 992/1261 [07:02<02:01,  2.22it/s]








 79%|███████▊  | 993/1261 [07:03<01:59,  2.24it/s]








 79%|███████▉  | 994/1261 [07:03<02:01,  2.20it/s]








 79%|███████▉  | 995/1261 [07:04<01:59,  2.23it/s]








 79%|███████▉  | 996/1261 [07:04<02:02,  2.16it/s]








 79%|███████▉  | 997/1261 [07:05<02:01,  2.17it/s]








 79%|███████▉  | 998/1261 [07:05<02:00,  2.19it/s]








 79%|███████▉  | 999/1261 [07:06<02:02,  2.15it/s]








 79%|███████▉  | 1000/1261 [07:06<02:00,  2.16it/s]








 79%|███████▉  | 1001/1261 [07:07<02:00,  2.16it/s]








 79%|███████▉  | 1002/1261 [07:07<02:00,  2.14it/s]








 80%|███████▉  | 1003/1261 [07:07<02:00,  2.14it/s]








 80%|███████▉  | 1004/1261 [07:08<01:59,  2.15it/s]








 80%|███████▉  | 1005/1261 [07:08<01:57,  2.19it/s]








 80%|███████▉  | 1006/1261 [07:09<02:00,  2.12it/s]








 80%|███████▉  | 1007/1261 [07:09<01:57,  2.17it/s]








 80%|███████▉  | 1008/1261 [07:10<01:57,  2.14it/s]








 80%|████████  | 1009/1261 [07:10<02:09,  1.94it/s]








 80%|████████  | 1010/1261 [07:11<02:06,  1.98it/s]








 80%|████████  | 1011/1261 [07:11<02:06,  1.98it/s]








 80%|████████  | 1012/1261 [07:12<02:02,  2.04it/s]








 80%|████████  | 1013/1261 [07:12<01:58,  2.09it/s]








 80%|████████  | 1014/1261 [07:13<01:53,  2.17it/s]








 80%|████████  | 1015/1261 [07:13<01:52,  2.19it/s]








 81%|████████  | 1016/1261 [07:14<01:51,  2.19it/s]








 81%|████████  | 1017/1261 [07:14<01:52,  2.18it/s]








 81%|████████  | 1018/1261 [07:15<01:53,  2.14it/s]








 81%|████████  | 1019/1261 [07:15<01:52,  2.15it/s]








 81%|████████  | 1020/1261 [07:15<01:49,  2.19it/s]








 81%|████████  | 1021/1261 [07:16<01:50,  2.18it/s]








 81%|████████  | 1022/1261 [07:16<01:53,  2.11it/s]








 81%|████████  | 1023/1261 [07:17<01:50,  2.15it/s]








 81%|████████  | 1024/1261 [07:17<01:51,  2.12it/s]








 81%|████████▏ | 1025/1261 [07:18<01:49,  2.16it/s]








 81%|████████▏ | 1026/1261 [07:18<01:51,  2.11it/s]








 81%|████████▏ | 1027/1261 [07:19<01:50,  2.13it/s]








 82%|████████▏ | 1028/1261 [07:19<01:46,  2.19it/s]








 82%|████████▏ | 1029/1261 [07:20<01:46,  2.17it/s]








 82%|████████▏ | 1030/1261 [07:20<01:45,  2.20it/s]








 82%|████████▏ | 1031/1261 [07:21<01:42,  2.24it/s]








 82%|████████▏ | 1032/1261 [07:21<01:42,  2.24it/s]








 82%|████████▏ | 1033/1261 [07:21<01:43,  2.21it/s]








 82%|████████▏ | 1034/1261 [07:22<01:43,  2.19it/s]








 82%|████████▏ | 1035/1261 [07:22<01:42,  2.21it/s]








 82%|████████▏ | 1036/1261 [07:23<01:43,  2.18it/s]








 82%|████████▏ | 1037/1261 [07:23<01:39,  2.24it/s]








 82%|████████▏ | 1038/1261 [07:24<01:39,  2.25it/s]








 82%|████████▏ | 1039/1261 [07:24<01:40,  2.22it/s]








 82%|████████▏ | 1040/1261 [07:25<01:38,  2.24it/s]








 83%|████████▎ | 1041/1261 [07:25<01:38,  2.23it/s]








 83%|████████▎ | 1042/1261 [07:26<01:42,  2.13it/s]








 83%|████████▎ | 1043/1261 [07:26<01:45,  2.06it/s]








 83%|████████▎ | 1044/1261 [07:27<01:45,  2.06it/s]








 83%|████████▎ | 1045/1261 [07:27<01:42,  2.10it/s]








 83%|████████▎ | 1046/1261 [07:27<01:39,  2.16it/s]








 83%|████████▎ | 1047/1261 [07:28<01:37,  2.20it/s]








 83%|████████▎ | 1048/1261 [07:28<01:35,  2.22it/s]








 83%|████████▎ | 1049/1261 [07:29<01:36,  2.19it/s]








 83%|████████▎ | 1050/1261 [07:29<01:35,  2.22it/s]








 83%|████████▎ | 1051/1261 [07:30<01:36,  2.18it/s]








 83%|████████▎ | 1052/1261 [07:30<01:37,  2.14it/s]








 84%|████████▎ | 1053/1261 [07:31<01:34,  2.21it/s]








 84%|████████▎ | 1054/1261 [07:31<01:34,  2.19it/s]








 84%|████████▎ | 1055/1261 [07:32<01:33,  2.21it/s]








 84%|████████▎ | 1056/1261 [07:32<01:35,  2.14it/s]








 84%|████████▍ | 1057/1261 [07:32<01:33,  2.18it/s]








 84%|████████▍ | 1058/1261 [07:33<01:34,  2.15it/s]








 84%|████████▍ | 1059/1261 [07:33<01:32,  2.18it/s]








 84%|████████▍ | 1060/1261 [07:34<01:39,  2.03it/s]








 84%|████████▍ | 1061/1261 [07:34<01:37,  2.06it/s]








 84%|████████▍ | 1062/1261 [07:35<01:33,  2.13it/s]








 84%|████████▍ | 1063/1261 [07:35<01:34,  2.10it/s]








 84%|████████▍ | 1064/1261 [07:36<01:32,  2.14it/s]








 84%|████████▍ | 1065/1261 [07:36<01:34,  2.07it/s]








 85%|████████▍ | 1066/1261 [07:37<01:33,  2.10it/s]








 85%|████████▍ | 1067/1261 [07:37<01:31,  2.11it/s]








 85%|████████▍ | 1068/1261 [07:38<01:30,  2.13it/s]








 85%|████████▍ | 1069/1261 [07:38<01:30,  2.11it/s]








 85%|████████▍ | 1070/1261 [07:39<01:28,  2.15it/s]








 85%|████████▍ | 1071/1261 [07:39<01:29,  2.13it/s]








 85%|████████▌ | 1072/1261 [07:40<01:28,  2.14it/s]








 85%|████████▌ | 1073/1261 [07:40<01:26,  2.18it/s]








 85%|████████▌ | 1074/1261 [07:40<01:25,  2.20it/s]








 85%|████████▌ | 1075/1261 [07:41<01:25,  2.18it/s]








 85%|████████▌ | 1076/1261 [07:41<01:27,  2.12it/s]








 85%|████████▌ | 1077/1261 [07:42<01:25,  2.16it/s]








 85%|████████▌ | 1078/1261 [07:42<01:23,  2.20it/s]








 86%|████████▌ | 1079/1261 [07:43<01:23,  2.18it/s]








 86%|████████▌ | 1080/1261 [07:43<01:20,  2.25it/s]








 86%|████████▌ | 1081/1261 [07:44<01:22,  2.18it/s]








 86%|████████▌ | 1082/1261 [07:44<01:20,  2.21it/s]








 86%|████████▌ | 1083/1261 [07:45<01:19,  2.23it/s]








 86%|████████▌ | 1084/1261 [07:45<01:19,  2.22it/s]








 86%|████████▌ | 1085/1261 [07:46<01:20,  2.19it/s]








 86%|████████▌ | 1086/1261 [07:46<01:19,  2.21it/s]








 86%|████████▌ | 1087/1261 [07:46<01:16,  2.26it/s]








 86%|████████▋ | 1088/1261 [07:47<01:20,  2.16it/s]








 86%|████████▋ | 1089/1261 [07:47<01:17,  2.21it/s]








 86%|████████▋ | 1090/1261 [07:48<01:18,  2.18it/s]








 87%|████████▋ | 1091/1261 [07:48<01:17,  2.20it/s]








 87%|████████▋ | 1092/1261 [07:49<01:18,  2.16it/s]








 87%|████████▋ | 1093/1261 [07:49<01:15,  2.23it/s]








 87%|████████▋ | 1094/1261 [07:50<01:15,  2.21it/s]








 87%|████████▋ | 1095/1261 [07:50<01:16,  2.18it/s]








 87%|████████▋ | 1096/1261 [07:51<01:15,  2.19it/s]








 87%|████████▋ | 1097/1261 [07:51<01:16,  2.15it/s]








 87%|████████▋ | 1098/1261 [07:51<01:15,  2.17it/s]








 87%|████████▋ | 1099/1261 [07:52<01:14,  2.17it/s]








 87%|████████▋ | 1100/1261 [07:52<01:15,  2.15it/s]








 87%|████████▋ | 1101/1261 [07:53<01:15,  2.13it/s]








 87%|████████▋ | 1102/1261 [07:53<01:15,  2.10it/s]








 87%|████████▋ | 1103/1261 [07:54<01:13,  2.14it/s]








 88%|████████▊ | 1104/1261 [07:54<01:13,  2.15it/s]








 88%|████████▊ | 1105/1261 [07:55<01:14,  2.10it/s]








 88%|████████▊ | 1106/1261 [07:55<01:13,  2.11it/s]








 88%|████████▊ | 1107/1261 [07:56<01:12,  2.14it/s]








 88%|████████▊ | 1108/1261 [07:56<01:09,  2.19it/s]








 88%|████████▊ | 1109/1261 [07:57<01:13,  2.07it/s]








 88%|████████▊ | 1110/1261 [07:57<01:10,  2.13it/s]








 88%|████████▊ | 1111/1261 [07:58<01:10,  2.13it/s]








 88%|████████▊ | 1112/1261 [07:58<01:08,  2.16it/s]








 88%|████████▊ | 1113/1261 [07:58<01:08,  2.15it/s]








 88%|████████▊ | 1114/1261 [07:59<01:06,  2.20it/s]








 88%|████████▊ | 1115/1261 [07:59<01:06,  2.19it/s]








 89%|████████▊ | 1116/1261 [08:00<01:06,  2.17it/s]








 89%|████████▊ | 1117/1261 [08:00<01:06,  2.18it/s]








 89%|████████▊ | 1118/1261 [08:01<01:06,  2.15it/s]








 89%|████████▊ | 1119/1261 [08:01<01:06,  2.15it/s]








 89%|████████▉ | 1120/1261 [08:02<01:06,  2.12it/s]








 89%|████████▉ | 1121/1261 [08:02<01:08,  2.04it/s]








 89%|████████▉ | 1122/1261 [08:03<01:06,  2.08it/s]








 89%|████████▉ | 1123/1261 [08:03<01:03,  2.18it/s]








 89%|████████▉ | 1124/1261 [08:04<01:01,  2.23it/s]








 89%|████████▉ | 1125/1261 [08:04<01:03,  2.14it/s]








 89%|████████▉ | 1126/1261 [08:05<01:03,  2.14it/s]








 89%|████████▉ | 1127/1261 [08:05<01:01,  2.19it/s]








 89%|████████▉ | 1128/1261 [08:05<00:59,  2.25it/s]








 90%|████████▉ | 1129/1261 [08:06<00:58,  2.26it/s]








 90%|████████▉ | 1130/1261 [08:06<00:58,  2.23it/s]








 90%|████████▉ | 1131/1261 [08:07<00:58,  2.24it/s]








 90%|████████▉ | 1132/1261 [08:07<00:58,  2.22it/s]








 90%|████████▉ | 1133/1261 [08:08<00:58,  2.18it/s]








 90%|████████▉ | 1134/1261 [08:08<00:58,  2.16it/s]








 90%|█████████ | 1135/1261 [08:09<00:57,  2.18it/s]








 90%|█████████ | 1136/1261 [08:09<00:57,  2.18it/s]








 90%|█████████ | 1137/1261 [08:09<00:54,  2.27it/s]








 90%|█████████ | 1138/1261 [08:10<00:55,  2.24it/s]








 90%|█████████ | 1139/1261 [08:10<00:54,  2.24it/s]








 90%|█████████ | 1140/1261 [08:11<00:53,  2.25it/s]








 90%|█████████ | 1141/1261 [08:11<00:54,  2.20it/s]








 91%|█████████ | 1142/1261 [08:12<00:54,  2.19it/s]








 91%|█████████ | 1143/1261 [08:12<00:53,  2.19it/s]








 91%|█████████ | 1144/1261 [08:13<00:53,  2.21it/s]








 91%|█████████ | 1145/1261 [08:13<00:53,  2.18it/s]








 91%|█████████ | 1146/1261 [08:14<00:53,  2.17it/s]








 91%|█████████ | 1147/1261 [08:14<00:52,  2.17it/s]








 91%|█████████ | 1148/1261 [08:14<00:52,  2.17it/s]








 91%|█████████ | 1149/1261 [08:15<00:52,  2.15it/s]








 91%|█████████ | 1150/1261 [08:15<00:51,  2.14it/s]








 91%|█████████▏| 1151/1261 [08:16<00:48,  2.25it/s]








 91%|█████████▏| 1152/1261 [08:16<00:49,  2.21it/s]








 91%|█████████▏| 1153/1261 [08:17<00:50,  2.14it/s]








 92%|█████████▏| 1154/1261 [08:17<00:50,  2.10it/s]








 92%|█████████▏| 1155/1261 [08:18<00:49,  2.12it/s]








 92%|█████████▏| 1156/1261 [08:18<00:49,  2.12it/s]








 92%|█████████▏| 1157/1261 [08:19<00:50,  2.07it/s]








 92%|█████████▏| 1158/1261 [08:19<00:49,  2.07it/s]








 92%|█████████▏| 1159/1261 [08:20<00:48,  2.10it/s]








 92%|█████████▏| 1160/1261 [08:20<00:46,  2.17it/s]








 92%|█████████▏| 1161/1261 [08:21<00:46,  2.16it/s]








 92%|█████████▏| 1162/1261 [08:21<00:45,  2.19it/s]








 92%|█████████▏| 1163/1261 [08:21<00:45,  2.16it/s]








 92%|█████████▏| 1164/1261 [08:22<00:43,  2.22it/s]








 92%|█████████▏| 1165/1261 [08:22<00:44,  2.17it/s]








 92%|█████████▏| 1166/1261 [08:23<00:45,  2.09it/s]








 93%|█████████▎| 1167/1261 [08:23<00:43,  2.18it/s]








 93%|█████████▎| 1168/1261 [08:24<00:41,  2.24it/s]








 93%|█████████▎| 1169/1261 [08:24<00:42,  2.15it/s]








 93%|█████████▎| 1170/1261 [08:25<00:41,  2.19it/s]








 93%|█████████▎| 1171/1261 [08:25<00:40,  2.22it/s]








 93%|█████████▎| 1172/1261 [08:26<00:40,  2.18it/s]








 93%|█████████▎| 1173/1261 [08:26<00:42,  2.07it/s]








 93%|█████████▎| 1174/1261 [08:27<00:40,  2.13it/s]








 93%|█████████▎| 1175/1261 [08:27<00:38,  2.23it/s]








 93%|█████████▎| 1176/1261 [08:27<00:38,  2.20it/s]








 93%|█████████▎| 1177/1261 [08:28<00:38,  2.16it/s]








 93%|█████████▎| 1178/1261 [08:28<00:39,  2.10it/s]








 93%|█████████▎| 1179/1261 [08:29<00:37,  2.19it/s]








 94%|█████████▎| 1180/1261 [08:29<00:38,  2.09it/s]








 94%|█████████▎| 1181/1261 [08:30<00:39,  2.04it/s]








 94%|█████████▎| 1182/1261 [08:30<00:38,  2.05it/s]








 94%|█████████▍| 1183/1261 [08:31<00:36,  2.11it/s]








 94%|█████████▍| 1184/1261 [08:31<00:36,  2.13it/s]








 94%|█████████▍| 1185/1261 [08:32<00:35,  2.17it/s]








 94%|█████████▍| 1186/1261 [08:32<00:33,  2.22it/s]








 94%|█████████▍| 1187/1261 [08:33<00:32,  2.24it/s]








 94%|█████████▍| 1188/1261 [08:33<00:32,  2.23it/s]








 94%|█████████▍| 1189/1261 [08:34<00:34,  2.10it/s]








 94%|█████████▍| 1190/1261 [08:34<00:34,  2.09it/s]








 94%|█████████▍| 1191/1261 [08:35<00:33,  2.11it/s]








 95%|█████████▍| 1192/1261 [08:35<00:32,  2.10it/s]








 95%|█████████▍| 1193/1261 [08:35<00:32,  2.09it/s]








 95%|█████████▍| 1194/1261 [08:36<00:31,  2.12it/s]








 95%|█████████▍| 1195/1261 [08:36<00:30,  2.15it/s]








 95%|█████████▍| 1196/1261 [08:37<00:30,  2.10it/s]








 95%|█████████▍| 1197/1261 [08:37<00:29,  2.18it/s]








 95%|█████████▌| 1198/1261 [08:38<00:29,  2.16it/s]








 95%|█████████▌| 1199/1261 [08:38<00:29,  2.13it/s]








 95%|█████████▌| 1200/1261 [08:39<00:28,  2.15it/s]








 95%|█████████▌| 1201/1261 [08:39<00:28,  2.08it/s]








 95%|█████████▌| 1202/1261 [08:40<00:27,  2.15it/s]








 95%|█████████▌| 1203/1261 [08:40<00:26,  2.18it/s]








 95%|█████████▌| 1204/1261 [08:41<00:27,  2.11it/s]








 96%|█████████▌| 1205/1261 [08:41<00:26,  2.09it/s]








 96%|█████████▌| 1206/1261 [08:42<00:26,  2.10it/s]








 96%|█████████▌| 1207/1261 [08:42<00:25,  2.12it/s]








 96%|█████████▌| 1208/1261 [08:42<00:24,  2.17it/s]








 96%|█████████▌| 1209/1261 [08:43<00:24,  2.15it/s]








 96%|█████████▌| 1210/1261 [08:43<00:23,  2.19it/s]








 96%|█████████▌| 1211/1261 [08:44<00:23,  2.14it/s]








 96%|█████████▌| 1212/1261 [08:44<00:23,  2.13it/s]








 96%|█████████▌| 1213/1261 [08:45<00:22,  2.10it/s]








 96%|█████████▋| 1214/1261 [08:45<00:21,  2.17it/s]








 96%|█████████▋| 1215/1261 [08:46<00:20,  2.25it/s]








 96%|█████████▋| 1216/1261 [08:46<00:20,  2.22it/s]








 97%|█████████▋| 1217/1261 [08:47<00:21,  2.08it/s]








 97%|█████████▋| 1218/1261 [08:47<00:20,  2.12it/s]








 97%|█████████▋| 1219/1261 [08:48<00:19,  2.18it/s]








 97%|█████████▋| 1220/1261 [08:48<00:18,  2.19it/s]








 97%|█████████▋| 1221/1261 [08:49<00:19,  2.09it/s]








 97%|█████████▋| 1222/1261 [08:49<00:18,  2.15it/s]








 97%|█████████▋| 1223/1261 [08:49<00:17,  2.12it/s]








 97%|█████████▋| 1224/1261 [08:50<00:17,  2.13it/s]








 97%|█████████▋| 1225/1261 [08:50<00:16,  2.12it/s]








 97%|█████████▋| 1226/1261 [08:51<00:16,  2.13it/s]








 97%|█████████▋| 1227/1261 [08:51<00:16,  2.09it/s]








 97%|█████████▋| 1228/1261 [08:52<00:15,  2.13it/s]








 97%|█████████▋| 1229/1261 [08:52<00:15,  2.10it/s]








 98%|█████████▊| 1230/1261 [08:53<00:14,  2.12it/s]








 98%|█████████▊| 1231/1261 [08:53<00:14,  2.10it/s]








 98%|█████████▊| 1232/1261 [08:54<00:13,  2.09it/s]








 98%|█████████▊| 1233/1261 [08:54<00:13,  2.07it/s]








 98%|█████████▊| 1234/1261 [08:55<00:13,  2.07it/s]








 98%|█████████▊| 1235/1261 [08:55<00:12,  2.04it/s]








 98%|█████████▊| 1236/1261 [08:56<00:12,  2.03it/s]








 98%|█████████▊| 1237/1261 [08:56<00:11,  2.05it/s]








 98%|█████████▊| 1238/1261 [08:57<00:11,  2.02it/s]








 98%|█████████▊| 1239/1261 [08:57<00:10,  2.02it/s]








 98%|█████████▊| 1240/1261 [08:58<00:09,  2.11it/s]








 98%|█████████▊| 1241/1261 [08:58<00:09,  2.10it/s]








 98%|█████████▊| 1242/1261 [08:59<00:09,  2.08it/s]








 99%|█████████▊| 1243/1261 [08:59<00:08,  2.08it/s]








 99%|█████████▊| 1244/1261 [09:00<00:08,  2.08it/s]








 99%|█████████▊| 1245/1261 [09:00<00:07,  2.06it/s]








 99%|█████████▉| 1246/1261 [09:01<00:06,  2.15it/s]








 99%|█████████▉| 1247/1261 [09:01<00:06,  2.08it/s]








 99%|█████████▉| 1248/1261 [09:01<00:06,  2.11it/s]








 99%|█████████▉| 1249/1261 [09:02<00:05,  2.05it/s]








 99%|█████████▉| 1250/1261 [09:02<00:05,  2.08it/s]








 99%|█████████▉| 1251/1261 [09:03<00:04,  2.17it/s]








 99%|█████████▉| 1252/1261 [09:03<00:04,  2.14it/s]








 99%|█████████▉| 1253/1261 [09:04<00:03,  2.09it/s]








 99%|█████████▉| 1254/1261 [09:04<00:03,  2.10it/s]








100%|█████████▉| 1255/1261 [09:05<00:02,  2.12it/s]








100%|█████████▉| 1256/1261 [09:05<00:02,  2.07it/s]








100%|█████████▉| 1257/1261 [09:06<00:01,  2.03it/s]








100%|█████████▉| 1258/1261 [09:06<00:01,  2.14it/s]








100%|█████████▉| 1259/1261 [09:07<00:00,  2.06it/s]








100%|█████████▉| 1260/1261 [09:07<00:00,  2.11it/s]








[MoviePy] Done.
[MoviePy] >>>> Video ready: white.mp4 

CPU times: user 8min 59s, sys: 20.9 s, total: 9min 20s
Wall time: 9min 10s
In [116]:
HTML("""
<video width="960" height="540" controls>
  <source src="{0}">
</video>
""".format(white_output))
Out[116]:
In [64]:
### Import everything needed to edit/save/watch video clips
from moviepy.editor import VideoFileClip
from IPython.display import HTML
#Camera Calibration parameters
camera_calib_pickle_file="./camera_calibrate.p"
ret,mtx,dist,rvecs,tvecs = getCalibrationParam(camera_calib_pickle_file)
# Set up lines for left and right
left_lane = Line(1,(720,1280),'left')
right_lane = Line(1,(720,1280),'right')
challenge_white_output = 'challenge_white.mp4'
challenge_clip1 = VideoFileClip("harder_challenge_video.mp4")
challenge_white_clip = challenge_clip1.fl_image(img_process) #NOTE: this function expects color images!!
%time challenge_white_clip.write_videofile(challenge_white_output, audio=False)
[MoviePy] >>>> Building video challenge_white.mp4
[MoviePy] Writing video challenge_white.mp4
100%|█████████▉| 1199/1200 [06:57<00:00,  2.80it/s]
[MoviePy] Done.
[MoviePy] >>>> Video ready: challenge_white.mp4 

CPU times: user 6min 56s, sys: 6.42 s, total: 7min 2s
Wall time: 7min 1s
In [65]:
HTML("""
<video width="960" height="540" controls>
  <source src="{0}">
</video>
""".format(challenge_white_output))
Out[65]: